我有一个与 Firefox 和 Chrome 18 完美配合的 websocket 客户端/服务器。它不适用于 Chrome 19 beta。我怀疑这是由于这个浏览器现在使用了我的服务器不支持的 deflate-frame 扩展。
Chrome 19 beta 在其握手中发送:“Sec-WebSocket-Extensions: x-webkit-deflate-frame”
我让我的服务器发回:“Sec-WebSocket-Extensions:”
但要么这不是拒绝扩展的正确方法,要么我没有发现其他错误。这是握手中唯一与我从工作浏览器中看到的不同的东西。
编辑:这是一些附加信息。这些是 Wireshark 捕获的握手。
使用 Firefox 12 的握手:
GET /chatserver HTTP/1.1
主机:(本文省略)
用户代理:Mozilla/5.0(Windows NT 6.1;WOW64;rv:12.0) Gecko/20100101 Firefox/12.0
接受:text/html,application/xhtml+xml, application/xml;q=0.9, / ;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive, Upgrade
Sec-WebSocket-Version: 13
来源:(本文省略)
Sec-WebSocket-Key:2TKm4ozUQdNP17Lobt7IBg==
Pragma:no-cache
Cache-Control:no-cache
升级:websocket
HTTP/1.1 101 切换协议
升级:websocket
连接:升级
Sec-WebSocket-Accept:pSUB3BT9YUUd9n3mOeWY/1uVqJE=
使用 Chrome 18 的握手:
GET /chatserver HTTP/1.1
升级:websocket
连接:升级
主机:(本文省略)
来源:(本文省略)
Sec-WebSocket-Key:zuHLEC8pGvAMadarhCLXFA==
Sec-WebSocket-Version:13
HTTP/1.1 101 切换协议
升级:websocket
连接:升级
Sec-WebSocket-Accept:LMBSq6Bk9Kiv+zAbQlAL899pfzc=
使用 Chrome 19 的握手:
GET /chatserver HTTP/1.1
升级:websocket
连接:升级
主机:(本文省略)
来源:(本文省略)
Sec-WebSocket-Key:TbwnVcuUiqGgZn7hxvxzvQ==
Sec-WebSocket-Version:13
Sec-WebSocket-Extensions: x-webkit-deflate-frame
HTTP/1.1 101 切换协议
升级:websocket
连接:升级
Sec-WebSocket-Accept:D45BJ+Vfydy1Upcs3Hze/nuiaS8=
Sec-WebSocket-Extensions:
所有服务器响应都有 \r\n 行结尾,并在消息末尾包含一个额外的 \r\n。
FF12 和 Chrome18 工作 - Chrome19 不工作。在 Chrome19 中,服务器握手响应之后的下一个数据包是 FIN/ACK。连接已关闭。
注意。我也尝试使用连字符作为 Sec-WebSocket-Extensions 值,但这也不起作用。