aboutsummaryrefslogtreecommitdiff
path: root/src/net/http/httputil/reverseproxy.go
diff options
context:
space:
mode:
authorAkhil Indurti <aindurti@gmail.com>2017-11-14 11:40:09 -0500
committerBrad Fitzpatrick <bradfitz@golang.org>2017-11-14 17:28:37 +0000
commit5ea2360b6643ec53018b1c080f4824b8238bff3a (patch)
tree19ef4b37dd1cc7ab06e456863dbaf290b4eadaaf /src/net/http/httputil/reverseproxy.go
parent0d9dc044d2008867e457a2023875501e1e986e6d (diff)
downloadgo-5ea2360b6643ec53018b1c080f4824b8238bff3a.tar.gz
go-5ea2360b6643ec53018b1c080f4824b8238bff3a.zip
net/http/httputil: allow ReverseProxy to call ModifyResponse on failed requests
Previously when RoundTrip returned a non-nil error, the proxy returned a StatusBadGateway error, instead of first calling ModifyResponse. This commit first calls ModifyResponse, whether or not the error returned from RoundTrip is nil. Also closes response body when ModifyResponse returns an error. See #22658. Fixes #21255 Change-Id: I5b5bf23a69ae5608f87d4ece756a1b4985ccaa9c Reviewed-on: https://go-review.googlesource.com/54030 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.go')
-rw-r--r--src/net/http/httputil/reverseproxy.go21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/net/http/httputil/reverseproxy.go b/src/net/http/httputil/reverseproxy.go
index b96bb21019..aa22d5a2fd 100644
--- a/src/net/http/httputil/reverseproxy.go
+++ b/src/net/http/httputil/reverseproxy.go
@@ -191,10 +191,11 @@ func (p *ReverseProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
}
res, err := transport.RoundTrip(outreq)
- if err != nil {
- p.logf("http: proxy error: %v", err)
- rw.WriteHeader(http.StatusBadGateway)
- return
+ if res == nil {
+ res = &http.Response{
+ StatusCode: http.StatusBadGateway,
+ Body: http.NoBody,
+ }
}
removeConnectionHeaders(res.Header)
@@ -204,12 +205,16 @@ func (p *ReverseProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
}
if p.ModifyResponse != nil {
- if err := p.ModifyResponse(res); err != nil {
+ if err != nil {
p.logf("http: proxy error: %v", err)
- rw.WriteHeader(http.StatusBadGateway)
- res.Body.Close()
- return
}
+ err = p.ModifyResponse(res)
+ }
+ if err != nil {
+ p.logf("http: proxy error: %v", err)
+ rw.WriteHeader(http.StatusBadGateway)
+ res.Body.Close()
+ return
}
copyHeader(rw.Header(), res.Header)