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握手协议的主要内容,如果未能解决你的问题,请参考以下文章

Workman websocket 握手连接

WebSocket协议-原理篇

一个 WebSocket 服务器是如何开发出来的?

Firebase - 切换到 WebSocket 协议 - 握手不起作用

websocket为啥只需一次握手

golang websocket