aboutsummaryrefslogtreecommitdiff
path: root/src/net/http/httputil/reverseproxy.go
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@golang.org>2019-01-09 15:06:20 +0000
committerBrad Fitzpatrick <bradfitz@golang.org>2019-01-09 15:51:59 +0000
commita14ed2a82a1563ba89e1f22ab517bf3c9abe416f (patch)
tree2bd87548d3b8d3735cc246111a0cb27161fd37ef /src/net/http/httputil/reverseproxy.go
parent99ea99ec4ca727ec3408521b07a6eb6a6bd3b829 (diff)
downloadgo-a14ed2a82a1563ba89e1f22ab517bf3c9abe416f.tar.gz
go-a14ed2a82a1563ba89e1f22ab517bf3c9abe416f.zip
net/http/httputil: run the ReverseProxy.ModifyResponse hook for upgrades
Fixes #29627 Change-Id: I08a5b45151a11b5a4f3b5a2d984c0322cf904697 Reviewed-on: https://go-review.googlesource.com/c/157098 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src/net/http/httputil/reverseproxy.go')
-rw-r--r--src/net/http/httputil/reverseproxy.go25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/net/http/httputil/reverseproxy.go b/src/net/http/httputil/reverseproxy.go
index 1c9feb7d7d..4e10bf3997 100644
--- a/src/net/http/httputil/reverseproxy.go
+++ b/src/net/http/httputil/reverseproxy.go
@@ -171,6 +171,20 @@ func (p *ReverseProxy) getErrorHandler() func(http.ResponseWriter, *http.Request
return p.defaultErrorHandler
}
+// modifyResponse conditionally runs the optional ModifyResponse hook
+// and reports whether the request should proceed.
+func (p *ReverseProxy) modifyResponse(rw http.ResponseWriter, res *http.Response, req *http.Request) bool {
+ if p.ModifyResponse == nil {
+ return true
+ }
+ if err := p.ModifyResponse(res); err != nil {
+ res.Body.Close()
+ p.getErrorHandler()(rw, req, err)
+ return false
+ }
+ return true
+}
+
func (p *ReverseProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
transport := p.Transport
if transport == nil {
@@ -250,6 +264,9 @@ func (p *ReverseProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
// Deal with 101 Switching Protocols responses: (WebSocket, h2c, etc)
if res.StatusCode == http.StatusSwitchingProtocols {
+ if !p.modifyResponse(rw, res, outreq) {
+ return
+ }
p.handleUpgradeResponse(rw, outreq, res)
return
}
@@ -260,12 +277,8 @@ func (p *ReverseProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
res.Header.Del(h)
}
- if p.ModifyResponse != nil {
- if err := p.ModifyResponse(res); err != nil {
- res.Body.Close()
- p.getErrorHandler()(rw, outreq, err)
- return
- }
+ if !p.modifyResponse(rw, res, outreq) {
+ return
}
copyHeader(rw.Header(), res.Header)