Websocket version 8秒- Websocket - accept不匹配



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

现在,随着新的更新,我正试图为新的握手工作方式做同样的事情。下面是我的服务器对握手请求的响应:

HTTP/1.1 101交换协议rnUpgrade: websocketrnConnection: UpgradernSec-WebSocket-Accept: "+ serverKey + "rnrn";

,其中serverkey计算正确。例如:

握手请求:
GET/test 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 =

我也用这里的例子https://datatracker.ietf.org/doc/html/draft-ietf-hybi-thewebsocketprotocol-08检查了我的算法,它产生了完全相同的响应。

但是我仍然得到以下错误:

WebSocket握手错误:Sec-WebSocket-Accept mismatch"

我使用chrome 15作为我的浏览器。

你知道哪里出了问题吗?

(也在chrome检查器网络中,它不显示响应,这是不接受握手的情况(即使是旧版本))

我实际上找到了主要问题。

我用于base64编码的密钥是

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

代替

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

一个额外的n是整个问题。

然而,现在我收到已连接的消息(ws客户端已成功连接到ws服务器),我不能发送或接收任何东西。问题出在服务器端

你知道与旧的websocket协议相比服务器端有什么变化吗?

客户端发送数据时有不同的帧协议。以前是很简单的。现在情况复杂多了。请参考websockets rfc6455规范。

https://www.rfc-editor.org/rfc/rfc6455部分- 5.2

相关内容

  • 没有找到相关文章

最新更新