DevToolPal
简
1xx 信息

101 Switching Protocols

切换协议

含义

服务器同意切换到客户端在 Upgrade 头中请求的协议,最常见的是 WebSocket。此响应之后,连接改用新协议通信。

常见原因

  • WebSocket 握手成功
  • 客户端请求升级到 h2c(明文 HTTP/2)
  • 接受了自定义协议升级

解决方法

客户端或访问者

对 WebSocket 来说,101 就是成功。如果期望 101 却收到 200 或 400,请确认 URL 指向 WebSocket 端点,并且代理转发了 Upgrade 和 Connection 头。

网站或 API 的维护者

在 nginx 或负载均衡器后面,要显式转发 Upgrade 和 Connection(proxy_set_header Upgrade $http_upgrade; Connection "upgrade"),并为长连接调大空闲超时。

响应示例

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

规范

RFC 9110 §15.2.2

常见问题

› 为什么我的 WebSocket 返回 400 而不是 101?

握手头缺失或被改动,常见原因是代理剥离了 Upgrade/Connection,或者 Sec-WebSocket-Key、版本号无效。

› HTTP/2 会用到 101 吗?

只有很少见的明文 h2c 升级会用。浏览器通过 TLS ALPN 协商 HTTP/2,HTTP/2 本身没有 101 响应。