websocket协议帧分析

websocket是html5中引入的一种网络传输协议,它可以保证浏览器与服务器端保持常连接,websocket协议是基于TCP协议的。

其中连接流程如下,客户端向服务器端发送连接请求,客户端与服务器端首先行进握手,握手成功后两者就开始通讯了。

一、协议握手

客户端发送请求,建立TCP连接。

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

其中Sec-WebSocket-Key是握手需要的key,服务端接收到数据后获取到Sec-WebSocket-Key将其与GUID(258EAFA5-E914-47DA-95CA-C5AB0DC85B11)连接形成dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11,再将其转为byte序列,将此序列进行SHA1的hash运算得到0xb3 0x7a 0x4f 0x2c 0xc0 0x62 0x4f 0x16 0x90 0xf6 0x46 0x06 0xcf 0x38 0x59 0x45 0xb2 0xbe 0xc4 0xea。再将其base64编码运算得到s3pPLMBiTxaQ9kYGzzhZRbK+xOo=,算得的字符串序列作为Sec-WebSocket-Accept。服务器端返回头如下

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

客户端收到信息后,经验证运算无误即握手成功。


你可能感兴趣的:(websocket)