WebSocket详解

x33g5p2x  于2021-09-24 转载在 其他  
字(1.0k)|赞(0)|评价(0)|浏览(539)

WebSocket简介

HTTP 有一个非常的大的局限就是 请求-响应 模式,只有客户端发送请求,服务器才能响应,发送数据给客户端。 服务器无法主动的向客户端发送数据。

WebSocket 是基于TCP实现的一种协议,服务器可以主动发送给客户端数据。

WebSocket 也是通过 URL来进行建立连接。
ws为其协议简称,wss为安全的WebSocket

ws://www.chrono.com
ws://www.chrono.com:8080/srv
wss://www.chrono.com:445/im?user_id=xxx

WebSocket 格式详解

我们说下几个主要的参数:

1、FIN标志位
结束标志,占用一个bit,如果FIN = 1,表示数据包的数据传送完毕,对应的应用程序可以对数据进行组装和读取了。

2、opcode
操作符,占用4个bit,对应的是帧类型,1表示为纯文本的帧,2表示是二进制的帧,8表示是关闭连接。

3、Mask
占用1个bit,表示是否使用 异或 进行简单的加密,客户端必须使用,服务器不做要求。

4、Payload len
占用7个位,表示帧内容的长度

5、Masking-Key
进行 异或 加密的密钥, WebSocket的加密没有什么用处,密钥和加密规则都被暴露了。。

WebSocket的握手过程

1、 WebSocket 采用HTTP的GET请求来进行握手,具体格式如下:

1、Upgradde
升级的协议, websocket

2、Host
对应的主机和端口号

3、Sec-WebSocket-Key
浏览器随机生成的一个16字节随机数,作为简单的认证标识

4、Sec-WebSocket-Version
WebSocket的版本

5、Connection
HTTP的连接属性,Upgrade 表示 升级。

2、 服务器接收到对应的GET请求后,发现Upgrade = websocket,
发送一个HTTP响应包:
Status Code = 101,表示切换协议。
Sec-WebSocket-Accept = xxx,其中 xxx 是 请求头中的Sec-WebSocket-Key加上一个指定的UUID,然后在做一个摘要。

3、 客户端接收到对应的响应包后,将Sec-WebSocket-Key 加上对应的UUID 然后做摘要,比对是否和相应包中的Sec-WebSocket-Accept一致,如果一致,代表建立连接成功。

4、后续不再使用HTTP报文交流,开始使用WebSocket来交流,开始使用WebSocket帧开始交流。

相关文章

微信公众号

最新文章

更多