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

Google chrome extension 无法使websocket连接在Chrome 19中工作,google-chrome-extension,websocket,phpwebsocket,Google Chrome Extension,Websocket,Phpwebsocket,我有一个websocket客户端/服务器,可以与Firefox和Chrome18完美配合。它不适用于Chrome 19 beta。我怀疑这是由于该浏览器现在使用了我的服务器不支持的deflate frame扩展 Chrome 19 beta在握手时发送: “Sec WebSocket扩展:x-webkit-deflate-frame” 我已将服务器发送回: “Sec WebSocket扩展:” 但是,要么这不是拒绝扩展的正确方式,要么我没有发现其他问题。这是握手中唯一不同于我从工作浏览器中看到的

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

Chrome 19 beta在握手时发送: “Sec WebSocket扩展:x-webkit-deflate-frame”

我已将服务器发送回: “Sec WebSocket扩展:”

但是,要么这不是拒绝扩展的正确方式,要么我没有发现其他问题。这是握手中唯一不同于我从工作浏览器中看到的东西

编辑:这里是一些附加信息。这些是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
接受语言:en-us,en;q=0.5
接受编码:gzip,放气
DNT:1
连接:保持活动状态,升级
Sec WebSocket版本:13
来源:(本帖略去)
Sec WebSocket密钥:2TKm4ozUQdNP17Lobt7IBg==
Pragma:没有缓存
缓存控制:无缓存
升级:websocket

HTTP/1.1 101交换协议
升级:websocket
连接:升级
Sec WebSocket接受:PSUB3BT9YOUD9N3Moewy/1uVqJE=


使用Chrome 18进行握手:

GET/chatserver HTTP/1.1
升级:websocket
连接:升级
主持人:(本帖略去)
来源:(本帖略去)
Sec WebSocket键:zuHLEC8pGvAMadarhCLXFA==
Sec WebSocket版本:13

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


使用Chrome 19进行握手:

GET/chatserver HTTP/1.1
升级:websocket
连接:升级
主持人:(本帖略去)
来源:(本帖略去)
Sec WebSocket密钥:TbwnVcuUiqGgZn7hxvxzvQ==
Sec WebSocket版本:13
Sec WebSocket扩展:x-webkit-deflate-frame

HTTP/1.1 101交换协议
升级:websocket
连接:升级
Sec WebSocket接受:D45BJ+Vfydy1Upcs3Hze/nuiaS8=
Sec WebSocket扩展:


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

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

注意。我还尝试使用连字符作为Sec WebSocket Extensions值,但也没有成功。

发现了问题

首先,服务器响应中的空白SEC WebSoT扩展条目产生了“<代码>无效的UTF-8序列在头值< /代码>”中的错误。删除该条目后,剩下的错误是“

服务器不得屏蔽发送给客户端的任何帧。

实际上,我的服务器实现(高度修改的PHPWebSocket版本)默认屏蔽它发送的帧。更改此默认行为修复了问题,websocket连接现在可以在Chrome19中工作

将PHPWebSocket标记添加到此问题中,因为这是该项目的一个问题。

对于Chrome,“Sec WebSocket Protocol”头必须对服务器端和客户端都有值。
这就是我的情况。

嗨,亚伦,你能告诉我在哪里换衣服吗?我有完全相同的问题,我使用的是相同的PHP Websocket,它突然停止了对最新版本的Chrome的工作。@clintogreen:在Connection.PHP中查找send函数。您将在参数中看到$masked默认为true。该参数必须为false,才能使send在Chrome 19+中正常工作。很抱歉迟了答复。