标题表示websocket服务器不支持任何扩展

时间:2012-07-18 14:52:53

标签: google-chrome websocket

我们遇到Chrome 19 websockets的问题。它正在尝试使用x-webkit-deflate-frame扩展程序连接到我们的服务器。但是,我无法弄清楚如何向该客户表明我们不支持该扩展(或者如果它是Chrome 19错误并且忽略了我们不支持它的事实?)。我已经看到这个问题与一些SO答案有关,但我看不出一致的解决方案。

例如,如果我们收到标题

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 个答案:

答案 0 :(得分:2)

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

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

当您没有返回任何扩展标题时,Chrome 19是否存在特定问题?

答案 1 :(得分:0)

从响应中省略Sec-WebSocket-Extension是正确的方法。

您还需要确保取消屏蔽收到的数据。如果您只是尝试接收文本,除非取消屏蔽,否则它将显示为乱码。

该网站对如何取消屏蔽通过websocket连接接收的数据有一个很好的解释: http://lucumr.pocoo.org/2012/9/24/websockets-101/