mirror of
https://github.com/yusing/godoxy.git
synced 2025-06-09 04:52:35 +02:00
fix potential issues with some websocket upstream servers
This commit is contained in:
parent
452bb0b0d7
commit
28d4373f67
1 changed files with 23 additions and 0 deletions
|
@ -375,6 +375,10 @@ func (p *ReverseProxy) handler(rw http.ResponseWriter, req *http.Request) {
|
||||||
if reqUpType != "" {
|
if reqUpType != "" {
|
||||||
outreq.Header.Set("Connection", "Upgrade")
|
outreq.Header.Set("Connection", "Upgrade")
|
||||||
outreq.Header.Set("Upgrade", reqUpType)
|
outreq.Header.Set("Upgrade", reqUpType)
|
||||||
|
|
||||||
|
if strings.EqualFold(reqUpType, "websocket") {
|
||||||
|
cleanWebsocketHeaders(outreq)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if clientIP, _, err := net.SplitHostPort(req.RemoteAddr); err == nil {
|
if clientIP, _, err := net.SplitHostPort(req.RemoteAddr); err == nil {
|
||||||
|
@ -538,6 +542,25 @@ func RemoveHopByHopHeaders(h http.Header) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// reference: https://github.com/traefik/traefik/blob/master/pkg/proxy/httputil/proxy.go
|
||||||
|
// https://tools.ietf.org/html/rfc6455#page-20
|
||||||
|
func cleanWebsocketHeaders(req *http.Request) {
|
||||||
|
req.Header["Sec-WebSocket-Key"] = req.Header["Sec-Websocket-Key"]
|
||||||
|
delete(req.Header, "Sec-Websocket-Key")
|
||||||
|
|
||||||
|
req.Header["Sec-WebSocket-Extensions"] = req.Header["Sec-Websocket-Extensions"]
|
||||||
|
delete(req.Header, "Sec-Websocket-Extensions")
|
||||||
|
|
||||||
|
req.Header["Sec-WebSocket-Accept"] = req.Header["Sec-Websocket-Accept"]
|
||||||
|
delete(req.Header, "Sec-Websocket-Accept")
|
||||||
|
|
||||||
|
req.Header["Sec-WebSocket-Protocol"] = req.Header["Sec-Websocket-Protocol"]
|
||||||
|
delete(req.Header, "Sec-Websocket-Protocol")
|
||||||
|
|
||||||
|
req.Header["Sec-WebSocket-Version"] = req.Header["Sec-Websocket-Version"]
|
||||||
|
delete(req.Header, "Sec-Websocket-Version")
|
||||||
|
}
|
||||||
|
|
||||||
func (p *ReverseProxy) handleUpgradeResponse(rw http.ResponseWriter, req *http.Request, res *http.Response) {
|
func (p *ReverseProxy) handleUpgradeResponse(rw http.ResponseWriter, req *http.Request, res *http.Response) {
|
||||||
reqUpType := UpgradeType(req.Header)
|
reqUpType := UpgradeType(req.Header)
|
||||||
resUpType := UpgradeType(res.Header)
|
resUpType := UpgradeType(res.Header)
|
||||||
|
|
Loading…
Add table
Reference in a new issue