WebSocket协议
字数 779 2025-11-15 07:11:39

WebSocket协议

WebSocket协议是一种在单个TCP连接上进行全双工通信的网络协议。它允许客户端和服务器之间建立持久连接,实现双向实时数据交换。

  1. 背景与需求
    在WebSocket出现之前,网页应用通常通过轮询(例如定期发送HTTP请求)或长轮询(保持HTTP连接直到服务器返回数据)实现实时更新。这些方式效率低,因为每个请求都需要携带HTTP头信息,且无法实现服务器主动推送数据。

  2. 协议特点

    • 全双工通信:客户端和服务器可以同时发送和接收数据。
    • 低开销:建立连接后,数据传输仅需少量字节的控制信息,无需重复发送HTTP头部。
    • 基于TCP:工作在TCP协议之上,默认使用端口80(WS)或443(WSS)。
    • 标准协议:由IETF标准化(RFC 6455),主流浏览器均支持。
  3. 连接建立过程

    • 客户端通过HTTP升级请求发起握手,请求头包含:
      Upgrade: websocket  
      Connection: Upgrade  
      Sec-WebSocket-Key: [随机生成的密钥]  
      
    • 服务器返回状态码101(切换协议),响应头包含:
      Sec-WebSocket-Accept: [基于客户端密钥计算的哈希值]  
      
    • 握手完成后,TCP连接复用为WebSocket通道,后续数据传输不再遵循HTTP格式。
  4. 数据帧结构
    WebSocket数据以帧(Frame)为单位传输,包含:

    • 操作码:定义数据类型(如文本、二进制、连接关闭)。
    • 掩码键:客户端发送的数据需掩码处理以防止代理缓存污染。
    • 负载长度:支持分帧传输大规模数据。
  5. 应用场景

    • 实时聊天、在线游戏、股票行情推送
    • 协同编辑工具、远程控制软件
    • 物联网设备状态同步
  6. 安全机制

    • 使用wss://协议通过TLS加密传输(类似HTTPS)。
    • 握手阶段的密钥验证确保连接未被中间人劫持。
    • 客户端掩码机制防止恶意脚本利用代理缓存攻击。
  7. 与HTTP/2 Server Push的区别
    HTTP/2 Server Push仅支持服务器单向推送资源,而WebSocket提供真正的双向通信能力,适用于需要持续交互的场景。

WebSocket协议 WebSocket协议是一种在单个TCP连接上进行全双工通信的网络协议。它允许客户端和服务器之间建立持久连接,实现双向实时数据交换。 背景与需求 在WebSocket出现之前,网页应用通常通过轮询(例如定期发送HTTP请求)或长轮询(保持HTTP连接直到服务器返回数据)实现实时更新。这些方式效率低,因为每个请求都需要携带HTTP头信息,且无法实现服务器主动推送数据。 协议特点 全双工通信 :客户端和服务器可以同时发送和接收数据。 低开销 :建立连接后,数据传输仅需少量字节的控制信息,无需重复发送HTTP头部。 基于TCP :工作在TCP协议之上,默认使用端口80(WS)或443(WSS)。 标准协议 :由IETF标准化(RFC 6455),主流浏览器均支持。 连接建立过程 客户端通过HTTP升级请求发起握手,请求头包含: 服务器返回状态码101(切换协议),响应头包含: 握手完成后,TCP连接复用为WebSocket通道,后续数据传输不再遵循HTTP格式。 数据帧结构 WebSocket数据以帧(Frame)为单位传输,包含: 操作码 :定义数据类型(如文本、二进制、连接关闭)。 掩码键 :客户端发送的数据需掩码处理以防止代理缓存污染。 负载长度 :支持分帧传输大规模数据。 应用场景 实时聊天、在线游戏、股票行情推送 协同编辑工具、远程控制软件 物联网设备状态同步 安全机制 使用 wss:// 协议通过TLS加密传输(类似HTTPS)。 握手阶段的密钥验证确保连接未被中间人劫持。 客户端掩码机制防止恶意脚本利用代理缓存攻击。 与HTTP/2 Server Push的区别 HTTP/2 Server Push仅支持服务器单向推送资源,而WebSocket提供真正的双向通信能力,适用于需要持续交互的场景。