From 22ad2f57ef91824fdec5010aa08755a4a6cca562 Mon Sep 17 00:00:00 2001 From: Daniel Liu Date: Fri, 8 Nov 2024 17:24:31 +0800 Subject: [PATCH] node: fix websocket connection header check (#21646) --- node/rpcstack.go | 2 +- node/rpcstack_test.go | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/node/rpcstack.go b/node/rpcstack.go index 0c6ecc4485..2de884f4c3 100644 --- a/node/rpcstack.go +++ b/node/rpcstack.go @@ -166,5 +166,5 @@ func NewWebsocketUpgradeHandler(h http.Handler, ws http.Handler) http.Handler { // isWebsocket checks the header of an http request for a websocket upgrade request. func isWebsocket(r *http.Request) bool { return strings.ToLower(r.Header.Get("Upgrade")) == "websocket" && - strings.ToLower(r.Header.Get("Connection")) == "upgrade" + strings.Contains(strings.ToLower(r.Header.Get("Connection")), "upgrade") } diff --git a/node/rpcstack_test.go b/node/rpcstack_test.go index 28bb786858..db08bd40cb 100644 --- a/node/rpcstack_test.go +++ b/node/rpcstack_test.go @@ -36,3 +36,18 @@ func TestNewWebsocketUpgradeHandler_websocket(t *testing.T) { response := <-responses assert.Equal(t, "websocket", response.Header.Get("Upgrade")) } + +// TestIsWebsocket tests if an incoming websocket upgrade request is handled properly. +func TestIsWebsocket(t *testing.T) { + r, _ := http.NewRequest("GET", "/", nil) + + assert.False(t, isWebsocket(r)) + r.Header.Set("upgrade", "websocket") + assert.False(t, isWebsocket(r)) + r.Header.Set("connection", "upgrade") + assert.True(t, isWebsocket(r)) + r.Header.Set("connection", "upgrade,keep-alive") + assert.True(t, isWebsocket(r)) + r.Header.Set("connection", " UPGRADE,keep-alive") + assert.True(t, isWebsocket(r)) +}