aboutsummaryrefslogtreecommitdiffstats
path: root/components/net/http_loader.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/net/http_loader.rs')
-rw-r--r--components/net/http_loader.rs19
1 files changed, 13 insertions, 6 deletions
diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs
index 95ecd161aff..f06323ac348 100644
--- a/components/net/http_loader.rs
+++ b/components/net/http_loader.rs
@@ -108,22 +108,29 @@ reason: \"certificate verify failed\" }]";
}
};
+ // Preserve the `host` header set automatically by Request.
+ let host = req.headers().get::<Host>().unwrap().clone();
+
// Avoid automatically preserving request headers when redirects occur.
// See https://bugzilla.mozilla.org/show_bug.cgi?id=401564 and
- // https://bugzilla.mozilla.org/show_bug.cgi?id=216828
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=216828 .
+ // Only preserve ones which have been explicitly marked as such.
if iters == 1 {
- // Preserve the `host` header set automatically by Request.
- let host = req.headers().get::<Host>().unwrap().clone();
- *req.headers_mut() = load_data.headers.clone();
- req.headers_mut().set(host);
+ let mut combined_headers = load_data.headers.clone();
+ combined_headers.extend(load_data.preserved_headers.iter());
+ *req.headers_mut() = combined_headers;
+ } else {
+ *req.headers_mut() = load_data.preserved_headers.clone();
}
+ req.headers_mut().set(host);
+
let (tx, rx) = channel();
cookies_chan.send(ControlMsg::GetCookiesForUrl(url.clone(), tx, CookieSource::HTTP));
if let Some(cookie_list) = rx.recv().unwrap() {
let mut v = Vec::new();
v.push(cookie_list.into_bytes());
- load_data.headers.set_raw("Cookie".to_owned(), v);
+ req.headers_mut().set_raw("Cookie".to_owned(), v);
}
// FIXME(seanmonstar): use AcceptEncoding from Hyper once available