首页/网络/协议速查/101 切换协议
HTTP 方法与状态码91 条

101 切换协议

响应 Upgrade 请求:服务器同意切换到请求头中指定的新协议(如 WebSocket),此后连接按新协议通信。

协议速查网络更新于 2026-10-13

101 表示协议已切换

101 Switching Protocols 是对 Upgrade 请求的确认:客户端在请求里声明希望换成某个新协议,服务端同意后返回 101,从这一刻起这条 TCP 连接上的通信就按新协议进行,HTTP 不再解析内容。WebSocket 握手是它最典型的应用。切换完成后,双方都不再按 HTTP 的报文格式收发数据,这也是抓包分析时容易看错的地方。

基本信息

名称101 Switching Protocols
作用确认协议升级,之后的连接按新协议通信
规范RFC 9110 第 15.2.2 节
请求侧要求带 Upgrade 与 Connection 头声明目标协议
响应侧要求回 101 并带上同名的 Upgrade 与 Connection 头
版本差异HTTP/1.1 用 101 升级;HTTP/2 通过扩展 CONNECT 实现,TLS 上的 h2 直接用 ALPN 协商

WebSocket 升级握手

WebSocket 升级握手
GET /chat HTTP/1.1                     # 客户端发起升级请求
Host: wss.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13

HTTP/1.1 101 Switching Protocols        # 服务端同意升级
Upgrade: websocket
Connection: Upgrade
# 之后连接上传输的是 WebSocket 帧,不再是 HTTP 报文

观察项与排障

观察项含义异常表现
Upgrade 请求头客户端要求的协议缺失时服务端不会升级,按普通请求处理
Connection 头必须包含 Upgrade 标记被代理剥离时升级失败,可能回落为普通响应
101 状态码升级成功返回 400 或 426 说明代理或服务端不支持升级
Sec-WebSocket-Key握手校验用的随机值服务端用它计算响应值,不匹配会被客户端断开
后续帧结构不再符合 HTTP 报文格式抓包工具若仍按 HTTP 解析会显示乱码

典型使用场景

  • 实时通信:聊天、通知推送、行情与协作类应用建立长连接
  • 反向代理配置验证:确认升级相关请求头是否被正确透传
  • 排查重连风暴:连接被中间设备重置后客户端反复重连,需要看掉在哪一步
  • 灰度发布验证:确认新版本网关对升级请求的处理是否一致
  • 抓包分析:区分哪一段是 HTTP 握手、哪一段已经是新协议数据
Nginx 反向代理 WebSocket 时必须显式配置升级相关请求头,否则升级请求会被当作普通请求转发,表现为连接建立后立刻断开,或长时间等待后失败。
HTTP/2 不使用 101:明文场景靠升级或直接使用 h2c,加密场景通过 ALPN 在握手阶段直接协商出 h2,抓包看到的形态与 HTTP/1.1 的升级流程完全不同。

易错点

  • 反向代理没有透传升级相关请求头,WebSocket 连接建立后立即断开,客户端不断重连并放大后端压力
  • 把协议升级失败当成应用代码问题排查,实际是中间网关或负载均衡不支持或未开启升级
  • 抓包分析升级后的流量时仍按 HTTP 解析,看到的乱码被误判为数据损坏
  • 长连接缺少心跳与超时设置,中间设备静默切断连接后再重连,用户侧看到消息延迟或丢失

数据来源与参考

  • RFC 9110 §15.2.2 101
  • RFC 6455(WebSocket 握手)
  • RFC 8441(HTTP/2 CONNECT 扩展)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌