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