Skip to main content

RFC 6455 - The WebSocket Protocol (WebSocket协议)

发布日期: 2011年12月
状态: 标准跟踪协议 (Standards Track)
作者: I. Fette (Google Inc.), A. Melnikov (Isode Ltd.)


摘要 (Abstract)

WebSocket协议在单个TCP连接上实现客户端和服务器之间的全双工通信。WebSocket协议旨在被在Web浏览器和Web服务器中实现,但它可以被任何客户端或服务器应用程序使用。

WebSocket协议是一个独立的基于TCP的协议。它与HTTP的唯一关系是其握手被HTTP服务器解释为升级请求。


目录 (Table of Contents)


附加资源


相关RFC

  • RFC 6455: The WebSocket Protocol ← 本文档
  • RFC 7692: WebSocket Compression Extensions (WebSocket压缩扩展)
  • RFC 8441: Bootstrapping WebSockets with HTTP/2 (在HTTP/2上引导WebSocket)
  • RFC 6455: WebSocket Protocol Security Considerations

快速参考

WebSocket URI格式

ws-URI = "ws:" "//" host [ ":" port ] path [ "?" query ]
wss-URI = "wss:" "//" host [ ":" port ] path [ "?" query ]
  • ws:// - 非加密连接 (默认端口80)
  • wss:// - TLS加密连接 (默认端口443,生产环境推荐)

握手示例

客户端请求:

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

服务器响应:

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

帧类型 (Opcode)

Opcode类型说明
0x0Continuation延续帧
0x1Text文本帧 (UTF-8)
0x2Binary二进制帧
0x8Close关闭帧
0x9PingPing帧 (心跳检测)
0xAPongPong帧 (心跳响应)

关闭状态码

代码名称说明
1000Normal Closure正常关闭
1001Going Away端点离开 (如页面导航)
1002Protocol Error协议错误
1003Unsupported Data不支持的数据类型
1006Abnormal Closure异常关闭 (未发送Close帧)
1009Message Too Big消息过大
1011Internal Error服务器内部错误

帧结构 (基本格式)

 0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len | Extended payload length |
|I|S|S|S| (4) |A| (7) | (16/64) |
|N|V|V|V| |S| | (if payload len==126/127) |
| |1|2|3| |K| | |
+-+-+-+-+-------+-+-------------+-------------------------------+
| Extended payload length continued, if payload len == 127 |
+-------------------------------+-------------------------------+
| |Masking-key, if MASK set to 1 |
+-------------------------------+-------------------------------+
| Masking-key (continued) | Payload Data |
+-------------------------------+-------------------------------+

关键点:

  • FIN: 1=最后一帧, 0=还有后续帧
  • MASK: 客户端→服务器必须为1, 服务器→客户端必须为0
  • Opcode: 帧类型标识
  • Payload Length: 数据长度 (0-125直接表示, 126用16位, 127用64位)

核心术语表

英文术语中文译法说明
Full-Duplex Communication全双工通信双向同时通信
Opening Handshake开放握手HTTP升级到WebSocket的过程
Closing Handshake关闭握手优雅关闭连接的过程
Frame数据传输的基本单位
Message消息由一个或多个帧组成
Masking掩码客户端数据必须掩码(安全机制)
Fragmentation分片大消息分多帧传输

注意: 本RFC的各章节翻译正在进行中。部分章节可能暂未提供,请参考实现指南获取完整的技术说明、代码示例和最佳实践。