From f257b5fcef9babf6d7f6c77e14df4a77c402582f Mon Sep 17 00:00:00 2001 From: Sam Gibson Date: Sun, 30 Aug 2015 12:09:53 +1000 Subject: [PATCH] Adds content-length to empty-bodied non-GET/HEAD requests --- components/net/http_loader.rs | 4 ++++ tests/unit/net/http_loader.rs | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index d34184fee2a..0f4e6e3357a 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -533,6 +533,10 @@ pub fn load(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(), diff --git a/tests/unit/net/http_loader.rs b/tests/unit/net/http_loader.rs index 7a2f3981d9f..7d805f27d24 100644 --- a/tests/unit/net/http_loader.rs +++ b/tests/unit/net/http_loader.rs @@ -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::( + 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;