feat(client): add Config::set_host option
If set to false, the `Client` will no longer automatically set the `Host` header if absent.
This commit is contained in:
@@ -46,6 +46,7 @@ pub struct Client<C, B = proto::Body> {
|
||||
h1_writev: bool,
|
||||
pool: Pool<HyperClient<B>>,
|
||||
retry_canceled_requests: bool,
|
||||
set_host: bool,
|
||||
}
|
||||
|
||||
impl Client<HttpConnector, proto::Body> {
|
||||
@@ -101,6 +102,7 @@ impl<C, B> Client<C, B> {
|
||||
h1_writev: config.h1_writev,
|
||||
pool: Pool::new(config.keep_alive, config.keep_alive_timeout),
|
||||
retry_canceled_requests: config.retry_canceled_requests,
|
||||
set_host: config.set_host,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -147,7 +149,7 @@ where C: Connect,
|
||||
))));
|
||||
}
|
||||
};
|
||||
if !req.headers().has::<Host>() {
|
||||
if self.set_host && !req.headers().has::<Host>() {
|
||||
let host = Host::new(
|
||||
domain.host().expect("authority implies host").to_owned(),
|
||||
domain.port(),
|
||||
@@ -289,6 +291,7 @@ impl<C, B> Clone for Client<C, B> {
|
||||
h1_writev: self.h1_writev,
|
||||
pool: self.pool.clone(),
|
||||
retry_canceled_requests: self.retry_canceled_requests,
|
||||
set_host: self.set_host,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -413,6 +416,7 @@ pub struct Config<C, B> {
|
||||
//TODO: make use of max_idle config
|
||||
max_idle: usize,
|
||||
retry_canceled_requests: bool,
|
||||
set_host: bool,
|
||||
}
|
||||
|
||||
/// Phantom type used to signal that `Config` should create a `HttpConnector`.
|
||||
@@ -429,6 +433,7 @@ impl Default for Config<UseDefaultConnector, proto::Body> {
|
||||
h1_writev: true,
|
||||
max_idle: 5,
|
||||
retry_canceled_requests: true,
|
||||
set_host: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -453,6 +458,7 @@ impl<C, B> Config<C, B> {
|
||||
h1_writev: self.h1_writev,
|
||||
max_idle: self.max_idle,
|
||||
retry_canceled_requests: self.retry_canceled_requests,
|
||||
set_host: self.set_host,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -467,6 +473,7 @@ impl<C, B> Config<C, B> {
|
||||
h1_writev: self.h1_writev,
|
||||
max_idle: self.max_idle,
|
||||
retry_canceled_requests: self.retry_canceled_requests,
|
||||
set_host: self.set_host,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -521,6 +528,18 @@ impl<C, B> Config<C, B> {
|
||||
self
|
||||
}
|
||||
|
||||
/// Set whether to automatically add the `Host` header to requests.
|
||||
///
|
||||
/// If true, and a request does not include a `Host` header, one will be
|
||||
/// added automatically, derived from the authority of the `Uri`.
|
||||
///
|
||||
/// Default is `true`.
|
||||
#[inline]
|
||||
pub fn set_host(mut self, val: bool) -> Config<C, B> {
|
||||
self.set_host = val;
|
||||
self
|
||||
}
|
||||
|
||||
#[doc(hidden)]
|
||||
#[deprecated(since="0.11.11", note="no_proto is always enabled")]
|
||||
pub fn no_proto(self) -> Config<C, B> {
|
||||
@@ -573,6 +592,7 @@ impl<C, B> fmt::Debug for Config<C, B> {
|
||||
.field("keep_alive_timeout", &self.keep_alive_timeout)
|
||||
.field("http1_writev", &self.h1_writev)
|
||||
.field("max_idle", &self.max_idle)
|
||||
.field("set_host", &self.set_host)
|
||||
.finish()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user