Websocket版本8 Sec-WebSocket-Accept不匹配

时间:2011-12-02 19:12:17

标签: websocket handshake

我用c ++编写了一个websocket服务器,可以使用websocket协议00(带有key1的一个,握手头中的key2)。

现在有了新的更新,我正在努力为新的握手工作做同样的事情。这是我对握手请求的服务器响应:

“HTTP / 1.1 101切换协议\ r \ n升级:websocket \ r \ n连接:升级\ r \ nSec-WebSocket-Accept:”+ serverKey +“\ r \ n \ r \ n”;

正确计算serverkey。举个例子:

握手请求:
GET /测试HTTP / 1.1
升级:websocket
连接:升级
主持人:192.168.123.102:8585
Sec-WebSocket-Origin:http://192.168.123.5
Sec-WebSocket-Key:YB0mPvJ5t8ggCeGUWY39uQ ==
Sec-WebSocket-Version:8

握手回复标题:
HTTP / 1.1 101交换协议
升级:websocket
连接:升级
Sec-WebSocket-Accept:xt9iyCNryQTseELUkHPWjzxA2ts =

我也用http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-08中的示例检查我的算法,它产生了完全相同的响应。

但是我仍然收到以下错误:
“WebSocket握手期间出错:Sec-WebSocket-Accept不匹配”

我使用chrome 15作为浏览器。

你知道出了什么问题吗?

(同样在Chrome检查员网络中,它不会显示不接受握手的情况下的响应(即使是旧版本))

2 个答案:

答案 0 :(得分:2)

我实际上发现了什么是主要问题。

我用于base64编码的密钥是

YB0mPvJ5t8ggCeGUWY39uQ==
258EAFA5-E914-47DA-95CA-C5AB0DC85B11

而不是

YB0mPvJ5t8ggCeGUWY39uQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11

额外的\ n是整个问题。

HOWEVER ,现在我收到了Connected消息(ws客户端已成功连接到ws服务器)我无法发送或接收任何内容。问题是服务器端

你知道自旧的websocket协议以来服务器端的变化是什么?我只改变了我的握手反应,看起来不够。

答案 1 :(得分:2)

客户端发送数据时有一个不同的成帧协议。以前这很简单。现在它要复杂得多。请参阅websockets rfc6455规范。

http://tools.ietf.org/html/rfc6455#section-5.2