无法使websocket连接在Chrome 19中工作

Aar*_*ron 6 websocket google-chrome-extension phpwebsocket

我有一个websocket客户端/服务器,可以与Firefox和Chrome 18完美配合.它不适用于Chrome 19 beta.我怀疑这是由于这个浏览器现在使用我的服务器不支持的deflate-frame扩展.

Chrome 19测试版正在握手:"Sec-WebSocket-Extensions:x-webkit-deflate-frame"

我让我的服务器发回:"Sec-WebSocket-Extensions:"

但要么这不是拒绝扩展的正确方法,要么是我没有抓到的其他错误.这是握手中唯一不同于我从工作浏览器中看到的东西.

编辑:这是一些额外的信息.这些是Wireshark捕获的握手.


使用Firefox 12的握手:

GET /的ChatServer HTTP/1.1
主机:(省略这个岗位)
的User-Agent:Mozilla的/ 5.0(Windows NT的6.1; WOW64; RV:12.0)的Gecko/20100101火狐/ 12.0
接受:text/html的,是application/xhtml + xml的,应用/ XML; q = 0.9,/ q = 0.8
的Accept-Language:EN-US,连接; q = 0.5
的Accept-Encoding:gzip的,放气
DNT:1个
连接:保持活着,升级
仲丁基的WebSocket-版本: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的密钥:zuHLEC8pGvAMadarhCLXFA ==
仲丁基的WebSocket-版本:13

HTTP/1.1 101交换协议
升级:websocket
连接:升级
Sec-WebSocket-Accept:LMBSq6Bk9Kiv + zAbQlAL899pfzc =


使用Chrome 19的握手:

GET /的ChatServer HTTP/1.1
升级:网页套接字
连接:升级
主机:(省略了这个职位)
来源:(省略了这个帖子)
二段的WebSocket密钥:TbwnVcuUiqGgZn7hxvxzvQ ==
二段的WebSocket-版本:13
秒-的WebSocket的扩展:的x WebKit的放气帧

HTTP/1.1 101交换协议
升级:websocket
连接:升级
Sec-WebSocket-Accept:D45BJ + Vfydy1Upcs3Hze/nuiaS8 =
Sec-WebSocket-Extensions:


所有服务器响应都有\ r \n行结尾,并在消息末尾包含一个额外的\ r \n.

FF12和Chrome18工作 - Chrome19不起作用.在Chrome19中,服务器握手响应之后的下一个数据包是FIN/ACK.连接已关闭.

NB.我也尝试使用连字符作为Sec-WebSocket-Extensions值,但这也不起作用.

Aar*_*ron 4

发现问题了。

首先,服务器响应中的空白 Sec-WebSocket-Extensions 条目产生了“ Invalid UTF-8 sequence in header value”错误。删除该条目后,剩下的错误是“ A server must not mask any frames that it sends to the client.

事实上,我的服务器实现(PHPWebSocket 的高度修改版本)默认会屏蔽它发送的帧。更改此默认行为解决了问题,并且 websocket 连接现在可以在 Chrome 19 中使用。

将 PHPWebSocket 标签添加到此问题,因为它是该项目的问题。