From 9401e3d1e4eb8759fe3a666f27b1b5e252b33bff Mon Sep 17 00:00:00 2001 From: Jukka-Pekka Kekkonen Date: Wed, 25 Aug 2010 12:52:04 -0400 Subject: [PATCH] websocket: fix missing Sec-WebSocket-Protocol on server response. Due to header key normalization/typo, the server never responds with the protocol header in place. This breaks all (draft76) applications that are using the protocol-header. R=ukai, rsc CC=golang-dev https://golang.org/cl/1969046 --- src/pkg/websocket/server.go | 2 +- src/pkg/websocket/websocket_test.go | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/pkg/websocket/server.go b/src/pkg/websocket/server.go index b58ad122b7..6f33a9abed 100644 --- a/src/pkg/websocket/server.go +++ b/src/pkg/websocket/server.go @@ -133,7 +133,7 @@ func (f Handler) ServeHTTP(c *http.Conn, req *http.Request) { buf.WriteString("Connection: Upgrade\r\n") buf.WriteString("Sec-WebSocket-Location: " + location + "\r\n") buf.WriteString("Sec-WebSocket-Origin: " + origin + "\r\n") - protocol, found := req.Header["Sec-WebSocket-Protocol"] + protocol, found := req.Header["Sec-Websocket-Protocol"] if found { buf.WriteString("Sec-WebSocket-Protocol: " + protocol + "\r\n") } diff --git a/src/pkg/websocket/websocket_test.go b/src/pkg/websocket/websocket_test.go index 22aa1fa5be..4cd84617c7 100644 --- a/src/pkg/websocket/websocket_test.go +++ b/src/pkg/websocket/websocket_test.go @@ -130,6 +130,23 @@ func TestWithQuery(t *testing.T) { ws.Close() } +func TestWithProtocol(t *testing.T) { + once.Do(startServer) + + client, err := net.Dial("tcp", "", serverAddr) + if err != nil { + t.Fatal("dialing", err) + } + + ws, err := newClient("/echo", "localhost", "http://localhost", + "ws://localhost/echo", "test", client, handshake) + if err != nil { + t.Errorf("WebSocket handshake: %v", err) + return + } + ws.Close() +} + func TestHTTP(t *testing.T) { once.Do(startServer) -- 2.48.1