aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@golang.org>2016-02-03 21:35:03 +0000
committerBrad Fitzpatrick <bradfitz@golang.org>2016-02-03 22:02:01 +0000
commit91911e39f0fdfecc5453f9eca7ff74215ffb28a2 (patch)
tree8eb292fa3c24e227abc5b2c5574b61c8aee679c7
parent03f42ee3a561100f99bd98c3a52780536a422ab7 (diff)
downloadgo-91911e39f0fdfecc5453f9eca7ff74215ffb28a2.tar.gz
go-91911e39f0fdfecc5453f9eca7ff74215ffb28a2.zip
net/http/httputil: also remove non-standard Proxy-Connection hop-by-hop header
libcurl sends this (despite never being standardized), and the Google GFE rejects it with a 400 bad request (but only when over http2?). So nuke it. Change-Id: I3fc95523d50f33a0e23bb26b9195f70ab0aed0f4 Reviewed-on: https://go-review.googlesource.com/19184 Reviewed-by: Chris Broadfoot <cbro@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
-rw-r--r--src/net/http/httputil/reverseproxy.go1
-rw-r--r--src/net/http/httputil/reverseproxy_test.go4
2 files changed, 5 insertions, 0 deletions
diff --git a/src/net/http/httputil/reverseproxy.go b/src/net/http/httputil/reverseproxy.go
index 38987d7a74..54411caeca 100644
--- a/src/net/http/httputil/reverseproxy.go
+++ b/src/net/http/httputil/reverseproxy.go
@@ -106,6 +106,7 @@ func copyHeader(dst, src http.Header) {
// http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html
var hopHeaders = []string{
"Connection",
+ "Proxy-Connection", // non-standard but still sent by libcurl and rejected by e.g. google
"Keep-Alive",
"Proxy-Authenticate",
"Proxy-Authorization",
diff --git a/src/net/http/httputil/reverseproxy_test.go b/src/net/http/httputil/reverseproxy_test.go
index 72662ccdc5..0849427b85 100644
--- a/src/net/http/httputil/reverseproxy_test.go
+++ b/src/net/http/httputil/reverseproxy_test.go
@@ -45,6 +45,9 @@ func TestReverseProxy(t *testing.T) {
if c := r.Header.Get("Upgrade"); c != "" {
t.Errorf("handler got Upgrade header value %q", c)
}
+ if c := r.Header.Get("Proxy-Connection"); c != "" {
+ t.Errorf("handler got Proxy-Connection header value %q", c)
+ }
if g, e := r.Host, "some-name"; g != e {
t.Errorf("backend got Host header %q, want %q", g, e)
}
@@ -72,6 +75,7 @@ func TestReverseProxy(t *testing.T) {
getReq, _ := http.NewRequest("GET", frontend.URL, nil)
getReq.Host = "some-name"
getReq.Header.Set("Connection", "close")
+ getReq.Header.Set("Proxy-Connection", "should be deleted")
getReq.Header.Set("Upgrade", "foo")
getReq.Close = true
res, err := http.DefaultClient.Do(getReq)