diff --git a/proxy/reverse.go b/proxy/reverse.go index ff3d683e8..ee0b9cbcd 100644 --- a/proxy/reverse.go +++ b/proxy/reverse.go @@ -73,6 +73,25 @@ func (p *reverseProxy) ServeHTTP(rw http.ResponseWriter, clientreq *http.Request return } + completeCh := make(chan bool, 1) + closeNotifier, ok := rw.(http.CloseNotifier) + if ok { + go func() { + select { + case <-closeNotifier.CloseNotify(): + tp, ok := p.transport.(*http.Transport) + if ok { + tp.CancelRequest(proxyreq) + } + case <-completeCh: + } + }() + + defer func() { + completeCh <- true + }() + } + var res *http.Response var err error