Adds content-length to empty-bodied non-GET/HEAD requests

This commit is contained in:
Sam Gibson 2015-08-30 12:09:53 +10:00
parent 976dbc5155
commit f257b5fcef
2 changed files with 24 additions and 0 deletions

View file

@ -533,6 +533,10 @@ pub fn load<A>(load_data: LoadData,
try!(req.send(&load_data.data))
}
_ => {
if load_data.method != Method::Get && load_data.method != Method::Head {
req.headers_mut().set(ContentLength(0))
}
send_request_to_devtools(
devtools_chan.clone(), request_id.clone(), url.clone(),
method.clone(), load_data.headers.clone(),

View file

@ -208,6 +208,26 @@ impl HttpRequest for AssertMustHaveBodyRequest {
}
}
#[test]
fn test_load_when_request_is_not_get_or_head_and_there_is_no_body_content_length_should_be_set_to_0() {
let url = Url::parse("http://mozilla.com").unwrap();
let resource_mgr = new_resource_task("Test-agent".to_string(), None);
let mut load_data = LoadData::new(url.clone(), None);
load_data.data = None;
load_data.method = Method::Post;
let mut content_length = Headers::new();
content_length.set_raw("Content-Length".to_owned(), vec![<[_]>::to_vec("0".as_bytes())]);
let _ = load::<AssertRequestMustHaveHeaders>(
load_data.clone(), resource_mgr, None,
&AssertMustHaveHeadersRequestFactory {
expected_headers: content_length,
body: <[_]>::to_vec(&[])
});
}
#[test]
fn test_load_when_redirecting_from_a_post_should_rewrite_next_request_as_get() {
struct Factory;