Upgrade 首部
HTTP Upgrade
请求和响应首部可以用于将已建立的客户端/服务器连接升级到不同的协议(在相同的传输协议上)。例如,客户端可以使用它将连接从 HTTP/1.1 升级到 HTTP/2,或者将 HTTP(S) 连接升级到 WebSocket 连接。
警告: HTTP/2 明确禁止使用此机制和首部;它仅限于 HTTP/1.1。
语法
Upgrade: <protocol>[/<protocol_version>]
Upgrade: <protocol>[/<protocol_version>], …, <protocolN>[/<protocol_versionN>]
指令
<协议>
-
协议按降序优先级以逗号分隔列出。
<protocol_version>
可选-
可以在协议版本前加上一个
/
斜杠来提供一个可选的协议版本。
描述
Upgrade
首部字段可用于客户端邀请服务器切换到所列协议中的一个(或多个),按降序优先级排列。例如,客户端可能会发送一个 GET
请求,如下所示,列出首选要切换的协议(在此示例中为 example/1
和 foo/2
):
GET /index.html HTTP/1.1
Host: www.example.com
Connection: upgrade
Upgrade: example/1, foo/2
注意: 类型为 upgrade
的 Connection
首部始终必须与 Upgrade
首部一起发送。
服务器可以出于任何原因忽略该请求,在这种情况下,它应该像没有发送 Upgrade
首部一样响应(例如,使用 200 OK
)。如果服务器将升级连接,它必须:
-
返回一个
101 Switching Protocols
响应状态,其中包含一个Upgrade
首部,该首部指定要切换到的协议。例如:httpHTTP/1.1 101 Switching Protocols Upgrade: foo/2 Connection: Upgrade
-
使用新协议响应原始请求(服务器只能切换到可以完成原始请求的协议)。
服务器还可以将此首部作为 426
Upgrade Required
响应的一部分发送,以指示服务器不会使用当前协议执行请求,但如果更改协议则可能会执行。然后客户端可以按照上述过程请求更改协议。
更多细节和示例请参见主题 协议升级机制。
示例
带多个协议的 Upgrade 首部
以下请求按降序优先级列出了多个协议:
Connection: upgrade
Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
升级到 WebSocket
这是开始将 HTTP 连接升级到 WebSocket 的常用首部组合。有关更多信息,请参阅升级到 WebSocket 连接。
Connection: Upgrade
Upgrade: websocket
规范
规范 |
---|
HTTP 语义 # field.upgrade |
HTTP 语义 # status.426 |
HTTP/2 # informational-responses |
浏览器兼容性
加载中…