xmx*_*xmx 2 javascript c++ websocket
我正在写一个c ++ websocket服务器,chrome上的开发工具说sec-websocket-accept标头值不正确。我已经测试了几天,一切似乎都很好。客户端在状态为3的情况下关闭,但没有在websocket onopen上调用,尽管在chrome开发工具中显示为101。
这是我计算钥匙的代码
string magickey = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
string key = msgkey.append(magickey);
unsigned char* sha_str = SHA1(reinterpret_cast<const unsigned char*>(key.c_str()), key.length(), nullptr);
string acceptkey = base64_encode(reinterpret_cast<const unsigned char*>(sha_str), strlen((char*)sha_str));
string handshake_response = "HTTP/1.1 101 Switching Protocols\r\n";
handshake_response.append("Upgrade: websocket\r\n");
handshake_response.append("Connection: Upgrade\r\n");
handshake_response.append("Sec-WebSocket-Accept: "+acceptkey+"\r\n");
handshake_response.append("\r\n");
Run Code Online (Sandbox Code Playgroud)
Chrome响应
HTTP / 1.1 101交换协议
升级:websocket
连接:升级
Sec-WebSocket-接受:5T5MvxP1iz40vLpi3kQs / ifDaCo =
Chrome请求
GET ws:// localhost:4897 / echo HTTP / 1.1
主机:localhost:4897
连接:升级程序
:无缓存
Cache-Control:无缓存
升级:websocket
来源:http:// localhost
Sec-WebSocket-Version :13
用户代理:Mozilla / 5.0(Windows NT 6.3; WOW64)AppleWebKit / 537.36(KHTML,如Gecko)Chrome / 47.0.2526.106 Safari / 537.36
Accept-Encoding:gzip,deflate,sdch
Accept-Language:zh-CN, en; q = 0.8
Sec-WebSocket-Key:LKF8lHGznbKGIgO1UzAOhg ==
Sec-WebSocket-Extensions:permessage-deflate; client_max_window_bits
它说:“ WebSocket握手期间出错:不正确的'Sec-WebSocket-Accept'标头值”。
Chrome浏览器还显示了另外一帧,接收到的大小为79字节的操作码-1。
谢谢堆!
Chrome说“ Sec-WebSocket-Accept”不正确。尝试手动计算时,我必须同意Chrome。
我的测试:
key。粗体值应相等。如果我在某个地方出错,请随时纠正我。
可能的问题:
是sha_str零终止的吗?即strlen((char*)sha_str) == 20?
有符号/无符号字符混合?
| 归档时间: |
|
| 查看次数: |
10179 次 |
| 最近记录: |