sec-websocket-protocol用于协商应用层子协议,是客户端与服务端约定通信语义的唯一http头;客户端在握手请求中以逗号分隔列出支持的协议(如chat,json-rpc),服务端必须原样返回其中一个匹配项,否则连接失败。

Sec-WebSocket-Protocol 的作用
这个字段用于协商应用层子协议,相当于在 WebSocket 连接之上再约定一层语义规则。比如客户端想用 chat 协议收发消息,或用 json-rpc 协议调用远程方法,就靠它声明和确认。
客户端如何发送
客户端在握手请求头中列出自己支持的子协议,多个用逗号分隔:
WebSocket 8.18.2 是该协议规范的一个重要迭代版本,主要优化了连接稳定性与数据传输效率。它通过全双工通信机制,允许客户端与服务器在单一长连接上实时交换数据,大幅降低传统 HTTP 轮询的开销。该版本增强了心跳保活、自动重连及二进制帧传输能力,适用于即时通讯、在线游戏及金融行情推送等低延迟场景,为开发者提供更可靠的实时网络交互基础。
- Sec-WebSocket-Protocol: chat, presence, json-rpc
- 顺序代表偏好,服务器通常选第一个它支持的
- 该字段可省略,表示不强制使用特定子协议
服务器如何响应
服务器不能随意返回任意值,必须严格满足以下条件:
- 只返回客户端请求中出现过的某一个协议名(如只写 chat)
- 不能拼错、不能加空格、不能大小写混用(Chat ≠ chat)
- 若不支持任何客户端提出的协议,就完全不返回该头部,此时连接仍可建立,只是无子协议上下文
实际开发注意事项
子协议本身不改变传输格式,但影响后续消息解析逻辑:
- 例如 chat 可能约定每条消息是 {“type”:“msg”, “from”:…} 结构
- 而 binary-v1 可能表示后续帧按自定义二进制格式解码
- 浏览器 JavaScript 中可通过 ws.protocol 读取最终协商结果









