diff options
| author | Andrew Gerrand <adg@golang.org> | 2011-10-26 15:27:29 +0900 |
|---|---|---|
| committer | Andrew Gerrand <adg@golang.org> | 2011-10-26 15:27:29 +0900 |
| commit | f777be8f83edbeb065ceb9c394c5bd8ebcc67111 (patch) | |
| tree | 09c5225c69d0a8face3ec893afa912a665382025 /src/pkg/http/reverseproxy.go | |
| parent | d12f66a8e83f11715e5286fae385d1a56023a0b6 (diff) | |
| download | go-f777be8f83edbeb065ceb9c394c5bd8ebcc67111.tar.xz | |
redo CL 5302057 / dac58d9c9e4a
««« original CL description
http: remove Connection header in ReverseProxy
Fixes #2342
R=golang-dev, adg
CC=golang-dev
https://golang.org/cl/5302057
»»»
R=bradfitz, dsymonds
CC=golang-dev
https://golang.org/cl/5296055
Diffstat (limited to 'src/pkg/http/reverseproxy.go')
| -rw-r--r-- | src/pkg/http/reverseproxy.go | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/src/pkg/http/reverseproxy.go b/src/pkg/http/reverseproxy.go index 3f8bfdc80c..3a63db009f 100644 --- a/src/pkg/http/reverseproxy.go +++ b/src/pkg/http/reverseproxy.go @@ -69,6 +69,14 @@ func NewSingleHostReverseProxy(target *url.URL) *ReverseProxy { return &ReverseProxy{Director: director} } +func copyHeader(dst, src Header) { + for k, vv := range src { + for _, v := range vv { + dst.Add(k, v) + } + } +} + func (p *ReverseProxy) ServeHTTP(rw ResponseWriter, req *Request) { transport := p.Transport if transport == nil { @@ -84,6 +92,16 @@ func (p *ReverseProxy) ServeHTTP(rw ResponseWriter, req *Request) { outreq.ProtoMinor = 1 outreq.Close = false + // Remove the connection header to the backend. We want a + // persistent connection, regardless of what the client sent + // to us. This is modifying the same underlying map from req + // (shallow copied above) so we only copy it if necessary. + if outreq.Header.Get("Connection") != "" { + outreq.Header = make(Header) + copyHeader(outreq.Header, req.Header) + outreq.Header.Del("Connection") + } + if clientIp, _, err := net.SplitHostPort(req.RemoteAddr); err == nil { outreq.Header.Set("X-Forwarded-For", clientIp) } @@ -95,12 +113,7 @@ func (p *ReverseProxy) ServeHTTP(rw ResponseWriter, req *Request) { return } - hdr := rw.Header() - for k, vv := range res.Header { - for _, v := range vv { - hdr.Add(k, v) - } - } + copyHeader(rw.Header(), res.Header) rw.WriteHeader(res.StatusCode) |
