Fix overwriting of appended request headers (#493)

* don't overwrite appended user headers

* Fixes tests, all header ordering related

* does not need to clone default headers, added a test
This commit is contained in:
Jerome Gravel-Niquet
2019-04-15 15:33:03 -04:00
committed by Sean McArthur
parent 38ea6a2d3c
commit 77434a29aa
6 changed files with 88 additions and 19 deletions

View File

@@ -6,6 +6,7 @@ use std::net::IpAddr;
use bytes::Bytes;
use futures::{Async, Future, Poll};
use header::{
Entry,
HeaderMap,
HeaderValue,
ACCEPT,
@@ -526,13 +527,16 @@ impl Client {
let (
method,
url,
user_headers,
mut headers,
body
) = req.pieces();
let mut headers = self.inner.headers.clone(); // default headers
for (key, value) in user_headers.iter() {
headers.insert(key, value.clone());
// insert default headers in the request headers
// without overwriting already appended headers.
for (key, value) in &self.inner.headers {
if let Ok(Entry::Vacant(entry)) = headers.entry(key) {
entry.insert(value.clone());
}
}
// Add cookies from the cookie store.