问答题2/102websocket 中的 Handshaking 是什么?

难度:
2023-05-24 创建

参考答案:

WebSocket 协议中,Handshaking(握手) 是指客户端和服务器在建立 WebSocket 连接之前进行的一次 升级请求与确认过程

它的作用是:

  1. 确认双方是否支持 WebSocket 协议
  2. 将原本的 HTTP/1.1 长连接升级为 WebSocket 专用的全双工连接
  3. 协商必要的协议参数(例如子协议 Sec-WebSocket-Protocol、扩展 Sec-WebSocket-Extensions 等)。

握手流程

  1. 客户端发起请求(HTTP Upgrade 请求) 客户端首先通过 HTTP 协议 发起请求,请求头中带有一些特殊字段,表明希望将 HTTP 连接升级为 WebSocket:

    1GET /chat HTTP/1.1 2Host: example.com:80 3Upgrade: websocket 4Connection: Upgrade 5Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== 6Sec-WebSocket-Version: 13
    • Upgrade: websocket 表示想升级协议
    • Connection: Upgrade 表示连接类型支持升级
    • Sec-WebSocket-Key 是客户端随机生成的一个 Base64 编码字符串,用于校验
    • Sec-WebSocket-Version 指定 WebSocket 版本(通常是 13)
  2. 服务器响应(HTTP 101 Switching Protocols) 如果服务器支持 WebSocket,它会返回 101 状态码,并在响应头中确认升级:

    1HTTP/1.1 101 Switching Protocols 2Upgrade: websocket 3Connection: Upgrade 4Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
    • 101 Switching Protocols 表示协议成功切换
    • Sec-WebSocket-Accept 是服务端根据客户端 Sec-WebSocket-Key 计算出的校验值,保证握手合法
  3. 连接建立成功 当握手完成后,HTTP 连接会升级为 WebSocket 通道,接下来就进入真正的 双向全双工通信 阶段,消息将以 WebSocket 帧的格式进行传输,而不是 HTTP。

最近更新时间:2025-08-28

赞赏支持

题库维护不易,您的支持就是我们最大的动力!