diff options
author | Sina Siadat <siadat@gmail.com> | 2016-09-04 12:20:14 +0430 |
---|---|---|
committer | Brad Fitzpatrick <bradfitz@golang.org> | 2016-09-08 04:37:36 +0000 |
commit | 24d8f3fa4b02784af2419eec8a28aee303aae0c5 (patch) | |
tree | 89c817b910d562bd416c70cc5345bfe50689c51d /src/net/http/httputil/reverseproxy_test.go | |
parent | b6f44923c0f88eb36816d90fb8fff2fd78422df5 (diff) | |
download | go-24d8f3fa4b02784af2419eec8a28aee303aae0c5.tar.gz go-24d8f3fa4b02784af2419eec8a28aee303aae0c5.zip |
net/http/httputil: copy header map if necessary in ReverseProxy
We were already making a copy of the map before removing
hop-by-hop headers. This commit does the same for proxied
headers mentioned in the "Connection" header.
A test is added to ensure request headers are not modified.
Updates #16875
Change-Id: I85329d212787958d5ad818915eb0538580a4653a
Reviewed-on: https://go-review.googlesource.com/28493
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/net/http/httputil/reverseproxy_test.go')
-rw-r--r-- | src/net/http/httputil/reverseproxy_test.go | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/net/http/httputil/reverseproxy_test.go b/src/net/http/httputil/reverseproxy_test.go index 8ab57b4cbb..870df130b1 100644 --- a/src/net/http/httputil/reverseproxy_test.go +++ b/src/net/http/httputil/reverseproxy_test.go @@ -156,12 +156,17 @@ func TestReverseProxyStripHeadersPresentInConnection(t *testing.T) { t.Fatal(err) } proxyHandler := NewSingleHostReverseProxy(backendURL) - frontend := httptest.NewServer(proxyHandler) + frontend := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + proxyHandler.ServeHTTP(w, r) + if c := r.Header.Get("Upgrade"); c != "original value" { + t.Errorf("handler modified header %q = %q; want %q", "Upgrade", c, "original value") + } + })) defer frontend.Close() getReq, _ := http.NewRequest("GET", frontend.URL, nil) getReq.Header.Set("Connection", "Upgrade, "+fakeConnectionToken) - getReq.Header.Set("Upgrade", "foo") + getReq.Header.Set("Upgrade", "original value") getReq.Header.Set(fakeConnectionToken, "should be deleted") res, err := http.DefaultClient.Do(getReq) if err != nil { |