WebSocket握手协议
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebSocket握手协议相关的知识,希望对你有一定的参考价值。
参考技术A 客户端发起连接请求:GET / HTTP/1.1\r\n
Connection: keep-alive, Upgrade\r\n
Sec-WebSocket-Version: 13\r\n
Sec-WebSocket-Key: puVOuWb7rel6z2AVZBKnfw==\r\n
Upgrade: websocket\r\n
\r\n
其它字段根据需要添加。 请求数据和http请求一样。 发现 Upgrade 字段为 websocket表示要建立websocket链接。 根据版本 Sec-WebSocket-Version 做相应的处理。
版本13服务器返回:
HTTP/1.1 101 Switching Protocols\r\n
Upgrade: websocket\r\n
Connection: Upgrade\r\n
Sec-WebSocket-Accept: FCKgUr8c7OsDsLFeJTWrJw6WO8Q=\r\n
\r\n
响应数据格式统一。 除了 Sec-WebSocket-Accept 需要根据请求头 Sec-WebSocket-Key 算出。其他都一样。
此时表示客户端服务端建立了常链接,双方可以互相发送数据了。
Sec-WebSocket-Accept计算流程:
拿到 Sec-WebSocket-Key 称之为 key
得到 sha1Str = sha1( key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11");
把 sha1Str 两个字符一组作为一个字节。得到新的字符串,最后做 base64 编码即可。
说明:
sha1加密的字符串是一个16进制的字符串,两个字符一组,假如 12, 那么转成一个字节就是
十进制 18 的二进制位。
参考文档:
https://www.jianshu.com/p/98911bf82ceb
https://blog.csdn.net/weixin_34080951/article/details/91915908
以上是关于WebSocket握手协议的主要内容,如果未能解决你的问题,请参考以下文章