Zach的博客

Websocket协议

Websocket握手

客户端握手请求

客户端发送一个正常的HTTP报文,报头信息类似为:

1
2
3
4
5
6
7
GET /chat HTTP/1.1
Host: example.com:8080
Upgrade: websocket
Connection: Upgrade
Sec-Websocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-Websocket-Protocol: chat, superchat
Sec-Websocket-Version: 13
1
Upgrade: websocket
Connection: Upgrade

这两个字端告诉服务器客户端请求的是Websocket协议

1
Sec-Websocket-Key: dGhlIHNhbXBsZSBub25jZQ==

由客户端随机生成,用于验证服务端的服务器用语处理这个请求的处理是否是Websocket助理

1
Sec-Websocket-Protocol: chat, superchat

子协议,用于表明客户端期望的子协议,服务器在子协议中选择支持的协议返回给客户端

1
Sec-Websocket-Version: 13

Websocket协议版本,固定为13

服务器返回握手请求

1
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-Websocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-Websocket-Protocol: chat

这里就不对服务器的响应再作叙述。

在握手完成之后客户端和服务器就可以开始发送Websocket报文了,报文以桢的形式发送,和HTTP报文再没有什么关系,报文格式参考RFC即可。