diff options
author | Julien Salleyron <julien.salleyron@gmail.com> | 2019-01-02 16:29:49 +0000 |
---|---|---|
committer | Brad Fitzpatrick <bradfitz@golang.org> | 2019-01-02 17:00:30 +0000 |
commit | 2175177497b74a1be52cc98a892e4197973c4ea6 (patch) | |
tree | e0c2546d80650ee63081dab03f3d450629de6642 /src/net/http/httputil/reverseproxy_test.go | |
parent | 8962b71c4947cdc915ae6dd837e644e03d2e7435 (diff) | |
download | go-2175177497b74a1be52cc98a892e4197973c4ea6.tar.gz go-2175177497b74a1be52cc98a892e4197973c4ea6.zip |
net/http/httputil: fix missing previous headers in response when switching protocol in ReverseProxy
When using switching protocol, previous headers set before the reverse proxy are lost.
Fixes #29407
Change-Id: Ia2b9784022d9bccef8625519ccbabbe8a276dfc0
GitHub-Last-Rev: 79bb493dcbb9b76d9d2ff9cd0854b29d634f8b73
GitHub-Pull-Request: golang/go#29408
Reviewed-on: https://go-review.googlesource.com/c/155741
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/net/http/httputil/reverseproxy_test.go')
-rw-r--r-- | src/net/http/httputil/reverseproxy_test.go | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/net/http/httputil/reverseproxy_test.go b/src/net/http/httputil/reverseproxy_test.go index 5caa206066..bda569acc7 100644 --- a/src/net/http/httputil/reverseproxy_test.go +++ b/src/net/http/httputil/reverseproxy_test.go @@ -1013,7 +1013,12 @@ func TestReverseProxyWebSocket(t *testing.T) { rproxy := NewSingleHostReverseProxy(backURL) rproxy.ErrorLog = log.New(ioutil.Discard, "", 0) // quiet for tests - frontendProxy := httptest.NewServer(rproxy) + handler := http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { + rw.Header().Set("X-Header", "X-Value") + rproxy.ServeHTTP(rw, req) + }) + + frontendProxy := httptest.NewServer(handler) defer frontendProxy.Close() req, _ := http.NewRequest("GET", frontendProxy.URL, nil) @@ -1028,6 +1033,13 @@ func TestReverseProxyWebSocket(t *testing.T) { if res.StatusCode != 101 { t.Fatalf("status = %v; want 101", res.Status) } + + got := res.Header.Get("X-Header") + want := "X-Value" + if got != want { + t.Errorf("Header(XHeader) = %q; want %q", got, want) + } + if upgradeType(res.Header) != "websocket" { t.Fatalf("not websocket upgrade; got %#v", res.Header) } @@ -1042,8 +1054,8 @@ func TestReverseProxyWebSocket(t *testing.T) { if !bs.Scan() { t.Fatalf("Scan: %v", bs.Err()) } - got := bs.Text() - want := `backend got "Hello"` + got = bs.Text() + want = `backend got "Hello"` if got != want { t.Errorf("got %#q, want %#q", got, want) } |