Upgrade 首部

HTTP Upgrade 请求响应首部可以用于将已建立的客户端/服务器连接升级到不同的协议(在相同的传输协议上)。例如,客户端可以使用它将连接从 HTTP/1.1 升级到 HTTP/2,或者将 HTTP(S) 连接升级到 WebSocket 连接。

警告: HTTP/2 明确禁止使用此机制和首部;它仅限于 HTTP/1.1。

头类型 请求标头, 响应标头
禁止请求头

语法

http
Upgrade: <protocol>[/<protocol_version>]
Upgrade: <protocol>[/<protocol_version>], …, <protocolN>[/<protocol_versionN>]

指令

<协议>

协议按降序优先级以逗号分隔列出。

<protocol_version> 可选

可以在协议版本前加上一个 / 斜杠来提供一个可选的协议版本。

描述

Upgrade 首部字段可用于客户端邀请服务器切换到所列协议中的一个(或多个),按降序优先级排列。例如,客户端可能会发送一个 GET 请求,如下所示,列出首选要切换的协议(在此示例中为 example/1foo/2):

http
GET /index.html HTTP/1.1
Host: www.example.com
Connection: upgrade
Upgrade: example/1, foo/2

注意: 类型为 upgradeConnection 首部始终必须与 Upgrade 首部一起发送。

服务器可以出于任何原因忽略该请求,在这种情况下,它应该像没有发送 Upgrade 首部一样响应(例如,使用 200 OK)。如果服务器将升级连接,它必须:

  1. 返回一个 101 Switching Protocols 响应状态,其中包含一个 Upgrade 首部,该首部指定要切换到的协议。例如:

    http
    HTTP/1.1 101 Switching Protocols
    Upgrade: foo/2
    Connection: Upgrade
    
  2. 使用新协议响应原始请求(服务器只能切换到可以完成原始请求的协议)。

服务器还可以将此首部作为 426 Upgrade Required 响应的一部分发送,以指示服务器不会使用当前协议执行请求,但如果更改协议则可能会执行。然后客户端可以按照上述过程请求更改协议。

更多细节和示例请参见主题 协议升级机制

示例

带多个协议的 Upgrade 首部

以下请求按降序优先级列出了多个协议:

http
Connection: upgrade
Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11

升级到 WebSocket

这是开始将 HTTP 连接升级到 WebSocket 的常用首部组合。有关更多信息,请参阅升级到 WebSocket 连接

http
Connection: Upgrade
Upgrade: websocket

规范

规范
HTTP 语义
# field.upgrade
HTTP 语义
# status.426
HTTP/2
# informational-responses

浏览器兼容性

另见