From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sat, 28 Apr 2018 08:30:26 +0200 Subject: Reduce HTTP headers in DoH requests to bare minimum License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- net/base/load_flags_list.h | 4 ++++ net/dns/dns_http_attempt.cc | 2 +- net/url_request/url_request_http_job.cc | 10 +++++++--- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/net/base/load_flags_list.h b/net/base/load_flags_list.h --- a/net/base/load_flags_list.h +++ b/net/base/load_flags_list.h @@ -123,4 +123,8 @@ LOAD_FLAG(SHOULD_BYPASS_HSTS, 1 << 18) // compromised renderer concern is acceptable. LOAD_FLAG(IS_MAIN_FRAME_ORIGIN_RECENTLY_ACCESSED, 1 << 19) +// Used to comply with IETF (draft) DNS-over-HTTPS: +// "Implementors SHOULD NOT set non-essential HTTP headers in DoH client requests." +LOAD_FLAG(MINIMAL_HEADERS, 1 << 20) + // See note at top of file about why adding LoadFlags is often a bad idea. diff --git a/net/dns/dns_http_attempt.cc b/net/dns/dns_http_attempt.cc --- a/net/dns/dns_http_attempt.cc +++ b/net/dns/dns_http_attempt.cc @@ -169,7 +169,7 @@ DnsHTTPAttempt::DnsHTTPAttempt(base::WeakPtr resolve_context, // avoid deadlock and enable the use of preconfigured IP addresses. request_->SetSecureDnsPolicy(SecureDnsPolicy::kBootstrap); request_->SetLoadFlags(request_->load_flags() | LOAD_DISABLE_CACHE | - LOAD_BYPASS_PROXY); + LOAD_MINIMAL_HEADERS | LOAD_BYPASS_PROXY); request_->set_disallow_credentials(); request_->set_isolation_info(GetDohIsolationInfo()); } diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc --- a/net/url_request/url_request_http_job.cc +++ b/net/url_request/url_request_http_job.cc @@ -537,6 +537,7 @@ void URLRequestHttpJob::OnGotFirstPartySetMetadata( // fields in the referrer. GURL referrer(request_->referrer()); + if (!(request_info_.load_flags & LOAD_MINIMAL_HEADERS)) { // Our consumer should have made sure that this is a safe referrer (e.g. via // URLRequestJob::ComputeReferrerForPolicy). if (referrer.is_valid()) { @@ -544,11 +545,14 @@ void URLRequestHttpJob::OnGotFirstPartySetMetadata( request_info_.extra_headers.SetHeader(HttpRequestHeaders::kReferer, referer_value); } + } + if (!(request_info_.load_flags & LOAD_MINIMAL_HEADERS)) { request_info_.extra_headers.SetHeaderIfMissing( HttpRequestHeaders::kUserAgent, http_user_agent_settings_ ? http_user_agent_settings_->GetUserAgent() : std::string()); + } AddExtraHeaders(); @@ -803,10 +807,10 @@ void URLRequestHttpJob::StartTransactionInternal() { void URLRequestHttpJob::AddExtraHeaders() { request_info_.extra_headers.SetAcceptEncodingIfMissing( request()->url(), request()->accepted_stream_types(), - request()->context()->enable_brotli(), - request()->context()->enable_zstd()); + !(request_info_.load_flags & LOAD_MINIMAL_HEADERS) && request()->context()->enable_brotli(), + !(request_info_.load_flags & LOAD_MINIMAL_HEADERS) && request()->context()->enable_zstd()); - if (http_user_agent_settings_) { + if (!(request_info_.load_flags & LOAD_MINIMAL_HEADERS) && http_user_agent_settings_) { // Only add default Accept-Language if the request didn't have it // specified. std::string accept_language = --