mirror of
https://github.com/caddyserver/caddy.git
synced 2024-11-25 17:56:34 +08:00
proxy: Fixed #1352: invalid use of the HTTP hijacker
This commit is contained in:
parent
8464020f7c
commit
ae10122f7e
|
@ -238,7 +238,7 @@ func (rp *ReverseProxy) ServeHTTP(rw http.ResponseWriter, outreq *http.Request,
|
||||||
panic(httpserver.NonHijackerError{Underlying: rw})
|
panic(httpserver.NonHijackerError{Underlying: rw})
|
||||||
}
|
}
|
||||||
|
|
||||||
conn, _, err := hj.Hijack()
|
conn, brw, err := hj.Hijack()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -260,8 +260,23 @@ func (rp *ReverseProxy) ServeHTTP(rw http.ResponseWriter, outreq *http.Request,
|
||||||
}
|
}
|
||||||
defer backendConn.Close()
|
defer backendConn.Close()
|
||||||
|
|
||||||
go pooledIoCopy(backendConn, conn) // write tcp stream to backend
|
// Proxy backend -> frontend.
|
||||||
pooledIoCopy(conn, backendConn) // read tcp stream from backend
|
go pooledIoCopy(conn, backendConn)
|
||||||
|
|
||||||
|
// Proxy frontend -> backend.
|
||||||
|
//
|
||||||
|
// NOTE: Hijack() sometimes returns buffered up bytes in brw which
|
||||||
|
// would be lost if we didn't read them out manually below.
|
||||||
|
if brw != nil {
|
||||||
|
if n := brw.Reader.Buffered(); n > 0 {
|
||||||
|
rbuf, err := brw.Reader.Peek(n)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
backendConn.Write(rbuf)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pooledIoCopy(backendConn, conn)
|
||||||
} else {
|
} else {
|
||||||
copyHeader(rw.Header(), res.Header)
|
copyHeader(rw.Header(), res.Header)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user