diff options
author | Joe Tsai <joetsai@digital-static.net> | 2019-07-16 17:40:20 -0700 |
---|---|---|
committer | Joe Tsai <thebrokentoaster@gmail.com> | 2019-07-17 21:52:45 +0000 |
commit | f93234ad620cc34573bca56be9fcf55c975e0821 (patch) | |
tree | f94d2806acf10ecf5a16ce853ce7b1c7677884ce /src/net/http/httputil/reverseproxy.go | |
parent | 5bc46cb71215f445797fb55e2b4eee795ee1ca17 (diff) | |
download | go-f93234ad620cc34573bca56be9fcf55c975e0821.tar.gz go-f93234ad620cc34573bca56be9fcf55c975e0821.zip |
net/http/httputil: fix regression in ReverseProxy.ServeHTTP
In Go1.12 and below, the logic in ReverseProxy.ServeHTTP would always
allocate request.Header even if it were not present in the incoming request.
CL 174324 added http.Request.Clone and re-factors ReverseProxy.ServeHTTP
to use the new Clone method. However, the new Clone logic is not equivalent
to the former logic. We preserve former semantics by explicitly allocating
the Header map if nil.
Fixes #33142
Change-Id: I356f94a915dd9779584ce3fe31e56e5474b9ad37
Reviewed-on: https://go-review.googlesource.com/c/go/+/186437
Run-TryBot: Joe Tsai <thebrokentoaster@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Andrew Bonventre <andybons@golang.org>
Diffstat (limited to 'src/net/http/httputil/reverseproxy.go')
-rw-r--r-- | src/net/http/httputil/reverseproxy.go | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/net/http/httputil/reverseproxy.go b/src/net/http/httputil/reverseproxy.go index 1d7b0efa11..e8f7df29a1 100644 --- a/src/net/http/httputil/reverseproxy.go +++ b/src/net/http/httputil/reverseproxy.go @@ -199,6 +199,9 @@ func (p *ReverseProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request) { if req.ContentLength == 0 { outreq.Body = nil // Issue 16036: nil Body for http.Transport retries } + if outreq.Header == nil { + outreq.Header = make(http.Header) // Issue 33142: historical behavior was to always allocate + } p.Director(outreq) outreq.Close = false |