TrueURL
TrueURL

菜单

101 切换协议

服务器接受客户端的 Upgrade 请求,将当前连接切换到另一种协议,实际上几乎总是切换到 WebSocket。

原因短语
Switching Protocols
是否重定向
否
默认可缓存
否

101 Switching Protocols 表示服务器接受了客户端的 Upgrade 请求头。101 响应以一个空行结束,紧接着双方就会在这条连接上改用另一种协议通信。响应中必须包含 Upgrade 响应头,注明新协议的名称。

如今这几乎都是 WebSocket 握手:浏览器发送一个带有 Upgrade: websocket、Connection: Upgrade 和 Sec-WebSocket-Key 的 GET 请求,服务器返回 101 以及对应的 Sec-WebSocket-Accept,此后双方交换的就是 WebSocket 帧。101 过去也用于 h2c 升级(从明文 HTTP/1.1 升级到 HTTP/2),但这种方式现已弃用,浏览器改为在 TLS 握手期间(通过 ALPN)协商 HTTP/2 和 HTTP/3。

Upgrade 机制只存在于 HTTP/1.1 中。HTTP/2 和 HTTP/3 从不发送 101;基于这两种协议的 WebSocket 使用扩展 CONNECT(RFC 8441 和 RFC 9220)。

响应示例

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

SEO 与重定向检测

普通的页面请求永远不会得到 101。浏览器和爬虫只有在明确要求升级连接时才会收到它,因此它对索引没有任何影响。重定向检测工具发送的是普通的 GET、HEAD 或 POST 请求,不会遇到 101。如果像普通 URL 一样检测 WebSocket 端点,它通常会返回 4xx 状态码,例如 426 Upgrade Required 或 400 Bad Request。

常见原因与使用场景

  • 浏览器打开 WebSocket(new WebSocket('wss://...')),服务器接受了握手。
  • 客户端请求已弃用的 h2c 升级(升级到明文 HTTP/2),而服务器支持该升级。
  • WebSocket 在反向代理后面无法连接,原因是代理没有转发 Upgrade 和 Connection 请求头。在 nginx 中设置 proxy_http_version 1.1,并把这两个请求头传递给后端。

URL 重定向检测

使用免费的 TrueURL 重定向检测工具,逐跳查看一个 URL 返回的每一个状态码。