WebSocket握手期间出错:秒WebSocket Accept不匹配
Error during WebSocket handshake: Sec-WebSocket-Accept mismatch
GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: localhost:53000
Origin: null
Sec-WebSocket-Protocol: hmiModel
Sec-WebSocket-Key: Hbw2xjBq6OTGXzxeuqrdVQ==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: x-webkit-deflate-frame
这是我在chrome浏览器上从客户端得到的请求密钥。之后,我把钥匙和魔术串连在一起。
魔术串是258EAFA5-E914-47DA-95CA-C5AB0DC85B11
然后我使用了SHA1算法,得到了下面的哈希值
a5877edcaa04801d07c5687aad3a6cf03d26ad5c
然后我用base64对上面的值进行编码,得到了加密值
Nzg1YWNkZTc0MGFhZDEwODVjNzA=
然后我向客户端发送响应握手
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Charset: ISO8859-1,UTF-8
Connection: keep-alive, Upgrade
WebSocket-Origin: localhost
WebSocket-Location: localhost
WebSocket-Protocol: hmiModel
Sec-webSocket-Version: 13
Sec-WebSocket-Accept: Nzg1YWNkZTc0MGFhZDEwODVjNzA=
但在控制台中,我得到的错误是">WebSocket握手期间出错:Sec-WebSocket Accept不匹配">
这样onopen和onmessage事件就不会因为这个错误而触发。
有人能告诉我我在哪里犯的错吗?
我还没有检查您的计算结果,但您的中间哈希值看起来很长。使用RFC4634中的SHA1代码,我使用如下代码来计算握手响应
std::string key;
// populate key with content of Sec-WebSocket-Key header
key.append("258EAFA5-E914-47DA-95CA-C5AB0DC85B11");
SHA1Context* sha1ctx = (SHA1Context*)malloc(sizeof(*sha1ctx));
(void)SHA1Reset(sha1ctx);
(void)SHA1Input(sha1ctx, key.c_str(), key.size());
uint8_t digest[SHA1HashSize];
(void)SHA1Result(sha1ctx, digest);
free(sha1ctx);
// convert std::string(&digest[0], sizeof(digest)) to base64
如果您想要更具体的反馈,请编辑您的问题以包含等效代码。
相关文章:
- Websocket++ 错误:收到错误handle_transport_init TLS 握手失败
- 如何使用 boost beast websocket 客户端收听 websocket feed?
- Boost (Beast) websocket:同步写入挂起
- boost beast Websocket Multi Request Server/Client 并不是真正的 mul
- Visual accept std::string from std::byte iterator
- 提升 Websocket 并io_context可重用性,以实现连接的可重新建立性
- 使用websocket时消息被延迟
- Websocket 客户端在 C++ 中使用 boost::Beast - 在写入操作时抛出错误
- 在QT中的两个窗口之间共享websocket连接
- 断开连接后重新连接boost beast(asio)websocket和http连接时出错
- 为什么Boost Variant使用模板构造函数而不是Boost::beast::websocket::stream的移
- boost beast websocket服务器也接受http连接
- 与Poco库的Websocket连接
- Aysnc 处理程序用于 POCO Websocket 中的传入消息
- C++ WebSocket 帧发送会导致服务器关闭连接
- Boost::Beast Websocket Bidirection Stream (C++)
- accept(..) 似乎正在修改我给它的文件描述符参数
- 如何在 Boost::Beast 上继续使用 websocket?
- Websocket握手Sec-Webocket Accept标头值不正确
- WebSocket握手期间出错:秒WebSocket Accept不匹配