Skip to content

Commit 0b69c61

Browse files
committed
Revert "net/http/httputil: allow ReverseProxy to call ModifyResponse on failed requests"
This reverts commit https://golang.org/cl/54030 Reason for revert: to not paint ourselves into a corner. See golang/go#23009 Fixes #23009 Updates #21255 Change-Id: I68caab078839b9d2bf645a7bbed8405a5a30cd22 Reviewed-on: https://go-review.googlesource.com/86435 Reviewed-by: Ian Lance Taylor <[email protected]>
1 parent bcfcb0c commit 0b69c61

File tree

2 files changed

+8
-42
lines changed

2 files changed

+8
-42
lines changed

httputil/reverseproxy.go

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -191,11 +191,10 @@ func (p *ReverseProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
191191
}
192192

193193
res, err := transport.RoundTrip(outreq)
194-
if res == nil {
195-
res = &http.Response{
196-
StatusCode: http.StatusBadGateway,
197-
Body: http.NoBody,
198-
}
194+
if err != nil {
195+
p.logf("http: proxy error: %v", err)
196+
rw.WriteHeader(http.StatusBadGateway)
197+
return
199198
}
200199

201200
removeConnectionHeaders(res.Header)
@@ -205,16 +204,12 @@ func (p *ReverseProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
205204
}
206205

207206
if p.ModifyResponse != nil {
208-
if err != nil {
207+
if err := p.ModifyResponse(res); err != nil {
209208
p.logf("http: proxy error: %v", err)
209+
rw.WriteHeader(http.StatusBadGateway)
210+
res.Body.Close()
211+
return
210212
}
211-
err = p.ModifyResponse(res)
212-
}
213-
if err != nil {
214-
p.logf("http: proxy error: %v", err)
215-
rw.WriteHeader(http.StatusBadGateway)
216-
res.Body.Close()
217-
return
218213
}
219214

220215
copyHeader(rw.Header(), res.Header)

httputil/reverseproxy_test.go

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -631,35 +631,6 @@ func TestReverseProxyModifyResponse(t *testing.T) {
631631
}
632632
}
633633

634-
// Issue 21255. Test ModifyResponse when an error from transport.RoundTrip
635-
// occurs, and that the proxy returns StatusOK.
636-
func TestReverseProxyModifyResponse_OnError(t *testing.T) {
637-
// Always returns an error
638-
errBackend := httptest.NewUnstartedServer(nil)
639-
errBackend.Config.ErrorLog = log.New(ioutil.Discard, "", 0) // quiet for tests
640-
defer errBackend.Close()
641-
642-
rpURL, _ := url.Parse(errBackend.URL)
643-
rproxy := NewSingleHostReverseProxy(rpURL)
644-
rproxy.ModifyResponse = func(resp *http.Response) error {
645-
// Will be set for a non-nil error
646-
resp.StatusCode = http.StatusOK
647-
return nil
648-
}
649-
650-
frontend := httptest.NewServer(rproxy)
651-
defer frontend.Close()
652-
653-
resp, err := http.Get(frontend.URL)
654-
if err != nil {
655-
t.Fatalf("failed to reach proxy: %v", err)
656-
}
657-
if resp.StatusCode != http.StatusOK {
658-
t.Errorf("err != nil: got res.StatusCode %d; expected %d", resp.StatusCode, http.StatusOK)
659-
}
660-
resp.Body.Close()
661-
}
662-
663634
// Issue 16659: log errors from short read
664635
func TestReverseProxy_CopyBuffer(t *testing.T) {
665636
backendServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

0 commit comments

Comments
 (0)