javascript – Websocket握手Sec-WebSocket-Accept标头值不正确
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – Websocket握手Sec-WebSocket-Accept标头值不正确,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2136字,纯文字阅读大概需要4分钟。
内容图文
![javascript – Websocket握手Sec-WebSocket-Accept标头值不正确](/upload/InfoBanner/zyjiaocheng/699/8054fc8198b74a58afde86f074b399ec.jpg)
我正在编写一个c websocket服务器,chrome上的dev工具说sec-websocket-accept标头值不正确.我已经测试了几天,一切都很好.尽管在chrome dev工具中显示为101,但客户端关闭了readystate 3而没有调用websocket onopen.
这是我计算密钥的代码
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");
Chrome响应
HTTP / 1.1 101交换协议
升级:websocket
连接:升级
Sec-WebSocket-Accept:5T5MvxP1iz40vLpi3kQs / ifDaCo =
Chrome请求
获取ws:// localhost:4897 / echo HTTP / 1.1
主持人:localhost:4897
连接:升级
Pragma:没有缓存
缓存控制:无缓存
升级:websocket
起源:http://localhost
Sec-WebSocket-Version:13
User-Agent: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:en-US,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.
我的测试:
> concat“LKF8lHGznbKGIgO1UzAOhg ==”和“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”
=> “LKF8lHGznbKGIgO1UzAOhg == 258EAFA5-E914-47DA-95CA-C5AB0DC85B11”,这是关键.
>计算SHA1 160位十六进制:bf15 14e3 7108 0ee4 7782 c709 a767 cc72 423d e5c4
>从您的日志中,您的编码到base64是:5T5MvxP1iz40vLpi3kQs / ifDaCo =
>将其解码为十六进制:e53e 4cbf 13f5 8b3e 34bc ba62 de44 2cfe
27c3 682a
粗体值应该相等.如果我在某处错了,请随意纠正我.
可能的问题:
> sha_str是否以null结尾?即strlen((char *)sha_str)== 20?
>签名/未签名的char混合?
内容总结
以上是互联网集市为您收集整理的javascript – Websocket握手Sec-WebSocket-Accept标头值不正确全部内容,希望文章能够帮你解决javascript – Websocket握手Sec-WebSocket-Accept标头值不正确所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。