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:
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
|
||||
Reference in New Issue
Block a user