2012-07-18 78 views
4

我们遇到了Chrome 19 websockets的问题。它正尝试使用x-webkit-deflate-frame扩展名连接到我们的服务器。但是,我无法解决如何向客户表明我们不支持该扩展(或者,如果它是Chrome 19的缺陷,并且忽略了我们不支持它的事实?)。我在几个SO答案中看到了这个问题,但我看不到一致的解决方案。表示websocket服务器不支持任何扩展的标题

例如,如果我们收到的报头

Upgrade: websocket 
Connection: Upgrade 
Host: titantest:30100 
Origin: http://titantest 
Sec-WebSocket-Key: f+7h4rrKKqdRRdD7WwTZow== 
Sec-WebSocket-Version: 13 
Sec-WebSocket-Extensions: x-webkit-deflate-frame 

我们应该以应对呢?

HTTP/1.1 101 Switching Protocols 
Upgrade: websocket 
Connection: Upgrade 
Sec-WebSocket-Accept: 3eazAhsFLXFWB1OjcYMtzP13yag= 

,然后附加到,我已经尝试了各种Sec-WebSocket-Extension品种

Sec-WebSocket-Extension: '-' 
Sec-WebSocket-Extension: - 
Sec-WebSocket-Extension: 
<- blank: don't send a Sec-WebSocket-Extension header -> 

我也得到了我的面前WebSocket协议的副本,可以随意地指出了我我错过了/误读了。

回答

2

RFC 6455的第9.1节涉及扩展协商。

客户端提出一个扩展列表,服务器从它想要接受的那些提议中选择并使用其返回的Sec-WebSocket-Extensions标头指示该选择。通过在服务器握手响应中根本不包括扩展头,它可以不接受任何东西。

当您返回无扩展头时,chrome 19是否存在特定问题?

+0

不知道我怎么错过了那句话! Chrome 19仍然通过没有'Sec-Websocket-Extensions'头部的情况下返回我们的握手响应来发送消息,而我的印象是客户端**必须掩蔽他们的websocket框架(至少在没有延期已经谈判)。它在Chrome 20和Chrome <= 18中似乎工作正常。 – dbeacham 2012-07-18 16:29:32

0

从响应中省略Sec-WebSocket-Extension是正确的选择。

您还需要确保您取消屏蔽接收到的数据。如果你只是想接收文本,它会出现乱码,除非它被揭露。

这个网站有关于如何揭露通过WebSocket连接接收到的数据很说明: http://lucumr.pocoo.org/2012/9/24/websockets-101/