Enable ClientBuilder to be configure with http1_allow_obsolete_multiline_headers_in_responses (#1521) (#1523)
This commit is contained in:
@@ -95,7 +95,7 @@ encoding_rs = "0.8"
|
|||||||
futures-core = { version = "0.3.0", default-features = false }
|
futures-core = { version = "0.3.0", default-features = false }
|
||||||
futures-util = { version = "0.3.0", default-features = false }
|
futures-util = { version = "0.3.0", default-features = false }
|
||||||
http-body = "0.4.0"
|
http-body = "0.4.0"
|
||||||
hyper = { version = "0.14.5", default-features = false, features = ["tcp", "http1", "http2", "client", "runtime"] }
|
hyper = { version = "0.14.18", default-features = false, features = ["tcp", "http1", "http2", "client", "runtime"] }
|
||||||
h2 = "0.3.10"
|
h2 = "0.3.10"
|
||||||
lazy_static = "1.4"
|
lazy_static = "1.4"
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
|
|||||||
@@ -105,6 +105,7 @@ struct Config {
|
|||||||
http_version_pref: HttpVersionPref,
|
http_version_pref: HttpVersionPref,
|
||||||
http09_responses: bool,
|
http09_responses: bool,
|
||||||
http1_title_case_headers: bool,
|
http1_title_case_headers: bool,
|
||||||
|
http1_allow_obsolete_multiline_headers_in_responses: bool,
|
||||||
http2_initial_stream_window_size: Option<u32>,
|
http2_initial_stream_window_size: Option<u32>,
|
||||||
http2_initial_connection_window_size: Option<u32>,
|
http2_initial_connection_window_size: Option<u32>,
|
||||||
http2_adaptive_window: bool,
|
http2_adaptive_window: bool,
|
||||||
@@ -169,6 +170,7 @@ impl ClientBuilder {
|
|||||||
http_version_pref: HttpVersionPref::All,
|
http_version_pref: HttpVersionPref::All,
|
||||||
http09_responses: false,
|
http09_responses: false,
|
||||||
http1_title_case_headers: false,
|
http1_title_case_headers: false,
|
||||||
|
http1_allow_obsolete_multiline_headers_in_responses: false,
|
||||||
http2_initial_stream_window_size: None,
|
http2_initial_stream_window_size: None,
|
||||||
http2_initial_connection_window_size: None,
|
http2_initial_connection_window_size: None,
|
||||||
http2_adaptive_window: false,
|
http2_adaptive_window: false,
|
||||||
@@ -487,6 +489,10 @@ impl ClientBuilder {
|
|||||||
builder.http1_title_case_headers(true);
|
builder.http1_title_case_headers(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if config.http1_allow_obsolete_multiline_headers_in_responses {
|
||||||
|
builder.http1_allow_obsolete_multiline_headers_in_responses(true);
|
||||||
|
}
|
||||||
|
|
||||||
let hyper_client = builder.build(connector);
|
let hyper_client = builder.build(connector);
|
||||||
|
|
||||||
let proxies_maybe_http_auth = proxies.iter().any(|p| p.maybe_has_http_auth());
|
let proxies_maybe_http_auth = proxies.iter().any(|p| p.maybe_has_http_auth());
|
||||||
@@ -861,6 +867,20 @@ impl ClientBuilder {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Set whether HTTP/1 connections will accept obsolete line folding for
|
||||||
|
/// header values.
|
||||||
|
///
|
||||||
|
/// Newline codepoints (`\r` and `\n`) will be transformed to spaces when
|
||||||
|
/// parsing.
|
||||||
|
pub fn http1_allow_obsolete_multiline_headers_in_responses(
|
||||||
|
mut self,
|
||||||
|
value: bool,
|
||||||
|
) -> ClientBuilder {
|
||||||
|
self.config
|
||||||
|
.http1_allow_obsolete_multiline_headers_in_responses = value;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
/// Only use HTTP/1.
|
/// Only use HTTP/1.
|
||||||
pub fn http1_only(mut self) -> ClientBuilder {
|
pub fn http1_only(mut self) -> ClientBuilder {
|
||||||
self.config.http_version_pref = HttpVersionPref::Http1;
|
self.config.http_version_pref = HttpVersionPref::Http1;
|
||||||
@@ -1535,6 +1555,10 @@ impl Config {
|
|||||||
f.field("http1_title_case_headers", &true);
|
f.field("http1_title_case_headers", &true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if self.http1_allow_obsolete_multiline_headers_in_responses {
|
||||||
|
f.field("http1_allow_obsolete_multiline_headers_in_responses", &true);
|
||||||
|
}
|
||||||
|
|
||||||
if matches!(self.http_version_pref, HttpVersionPref::Http1) {
|
if matches!(self.http_version_pref, HttpVersionPref::Http1) {
|
||||||
f.field("http1_only", &true);
|
f.field("http1_only", &true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -407,6 +407,15 @@ impl ClientBuilder {
|
|||||||
self.with_inner(|inner| inner.http1_title_case_headers())
|
self.with_inner(|inner| inner.http1_title_case_headers())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Set whether HTTP/1 connections will accept obsolete line folding for
|
||||||
|
/// header values.
|
||||||
|
///
|
||||||
|
/// Newline codepoints (`\r` and `\n`) will be transformed to spaces when
|
||||||
|
/// parsing.
|
||||||
|
pub fn http1_allow_obsolete_multiline_headers_in_responses(self, value: bool) -> ClientBuilder {
|
||||||
|
self.with_inner(|inner| inner.http1_allow_obsolete_multiline_headers_in_responses(value))
|
||||||
|
}
|
||||||
|
|
||||||
/// Only use HTTP/1.
|
/// Only use HTTP/1.
|
||||||
pub fn http1_only(self) -> ClientBuilder {
|
pub fn http1_only(self) -> ClientBuilder {
|
||||||
self.with_inner(|inner| inner.http1_only())
|
self.with_inner(|inner| inner.http1_only())
|
||||||
|
|||||||
Reference in New Issue
Block a user