fix(client): return error if Request has CONNECT method

The higher-level `Client` has never supported `CONNECT` requests,
but it used to send them, and then handle the responses incorrectly.
Now, it will return an error immediately instead of misbehaving.
This commit is contained in:
Sean McArthur
2018-03-06 10:48:59 -08:00
parent 33a385c6b6
commit bfcdbd9f86
2 changed files with 32 additions and 0 deletions

View File

@@ -138,9 +138,15 @@ where C: Connect,
}
}
if req.method() == &Method::Connect {
debug!("Client does not support CONNECT requests");
return FutureResponse(Box::new(future::err(::Error::Method)));
}
let domain = match uri::scheme_and_authority(req.uri()) {
Some(uri) => uri,
None => {
debug!("request uri does not include scheme and authority");
return FutureResponse(Box::new(future::err(::Error::Io(
io::Error::new(
io::ErrorKind::InvalidInput,

View File

@@ -592,6 +592,32 @@ test! {
}
test! {
name: client_connect_method,
server:
expected: "\
CONNECT {addr} HTTP/1.1\r\n\
Host: {addr}\r\n\
\r\n\
",
// won't ever get to reply
reply: "",
client:
request:
method: Connect,
url: "http://{addr}/",
headers: [],
body: None,
proxy: false,
error: |err| match err {
&hyper::Error::Method => true,
_ => false,
},
}
test! {
name: client_set_host_false,