Skip to content

Commit 22ad2f5

Browse files
committed
node: fix websocket connection header check (ethereum#21646)
1 parent b1d6bec commit 22ad2f5

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

node/rpcstack.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,5 +166,5 @@ func NewWebsocketUpgradeHandler(h http.Handler, ws http.Handler) http.Handler {
166166
// isWebsocket checks the header of an http request for a websocket upgrade request.
167167
func isWebsocket(r *http.Request) bool {
168168
return strings.ToLower(r.Header.Get("Upgrade")) == "websocket" &&
169-
strings.ToLower(r.Header.Get("Connection")) == "upgrade"
169+
strings.Contains(strings.ToLower(r.Header.Get("Connection")), "upgrade")
170170
}

node/rpcstack_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,18 @@ func TestNewWebsocketUpgradeHandler_websocket(t *testing.T) {
3636
response := <-responses
3737
assert.Equal(t, "websocket", response.Header.Get("Upgrade"))
3838
}
39+
40+
// TestIsWebsocket tests if an incoming websocket upgrade request is handled properly.
41+
func TestIsWebsocket(t *testing.T) {
42+
r, _ := http.NewRequest("GET", "/", nil)
43+
44+
assert.False(t, isWebsocket(r))
45+
r.Header.Set("upgrade", "websocket")
46+
assert.False(t, isWebsocket(r))
47+
r.Header.Set("connection", "upgrade")
48+
assert.True(t, isWebsocket(r))
49+
r.Header.Set("connection", "upgrade,keep-alive")
50+
assert.True(t, isWebsocket(r))
51+
r.Header.Set("connection", " UPGRADE,keep-alive")
52+
assert.True(t, isWebsocket(r))
53+
}

0 commit comments

Comments
 (0)