diff --git a/src/async_impl/client.rs b/src/async_impl/client.rs index 1f0001586..dd2793379 100644 --- a/src/async_impl/client.rs +++ b/src/async_impl/client.rs @@ -105,6 +105,7 @@ struct Config { http_version_pref: HttpVersionPref, http09_responses: bool, http1_title_case_headers: bool, + http1_allow_obsolete_multiline_headers_in_responses: bool, http2_initial_stream_window_size: Option, http2_initial_connection_window_size: Option, http2_adaptive_window: bool, @@ -169,6 +170,7 @@ impl ClientBuilder { http_version_pref: HttpVersionPref::All, http09_responses: false, http1_title_case_headers: false, + http1_allow_obsolete_multiline_headers_in_responses: false, http2_initial_stream_window_size: None, http2_initial_connection_window_size: None, http2_adaptive_window: false, @@ -487,6 +489,10 @@ impl ClientBuilder { 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 proxies_maybe_http_auth = proxies.iter().any(|p| p.maybe_has_http_auth()); @@ -861,6 +867,20 @@ impl ClientBuilder { 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. pub fn http1_only(mut self) -> ClientBuilder { self.config.http_version_pref = HttpVersionPref::Http1; @@ -1535,6 +1555,10 @@ impl Config { 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) { f.field("http1_only", &true); } diff --git a/src/blocking/client.rs b/src/blocking/client.rs index 95bcf1768..6e40e4d74 100644 --- a/src/blocking/client.rs +++ b/src/blocking/client.rs @@ -407,6 +407,15 @@ impl ClientBuilder { 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. pub fn http1_only(self) -> ClientBuilder { self.with_inner(|inner| inner.http1_only())