乐闻世界logo
搜索文章和话题

WebSocket的握手过程是怎样的?

2月18日 19:06

WebSocket连接的建立通过HTTP升级请求完成,整个过程如下:

客户端发起握手

客户端发送一个HTTP GET请求,包含以下关键头部:

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

关键头部说明:

  • Upgrade: websocket - 请求升级到WebSocket协议
  • Connection: Upgrade - 表示这是一个升级请求
  • Sec-WebSocket-Key - 客户端生成的随机字符串,用于安全验证
  • Sec-WebSocket-Version - WebSocket协议版本,目前为13
  • Origin - 请求来源,用于安全验证

服务器响应握手

服务器验证请求后,返回101状态码:

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

Sec-WebSocket-Accept计算过程:

  1. 将客户端的Sec-WebSocket-Key与固定字符串258EAFA5-E914-47DA-95CA-C5AB0DC85B11拼接
  2. 对拼接后的字符串进行SHA-1哈希
  3. 将哈希结果进行Base64编码
  4. 得到的值作为Sec-WebSocket-Accept返回

连接建立

握手成功后,TCP连接升级为WebSocket连接,双方可以开始双向通信。

安全考虑

  1. Origin验证:服务器应验证Origin头部,防止CSRF攻击
  2. Key验证:通过Sec-WebSocket-Key确保请求来自真正的WebSocket客户端
  3. WSS协议:使用wss://(WebSocket Secure)加密通信
标签:WebSocket