升级
HTTP 1.1 (仅限于) Upgrade
标头可用于将已经建立的客户端/服务器连接升级到不同的协议(在相同的传输协议之上)。例如,客户端可以使用它将连接从 HTTP 1.1 升级到 HTTP 2.0,或将 HTTP 或 HTTPS 连接升级到 WebSocket。
警告:HTTP/2 明确禁止使用此机制/标头;它专门针对 HTTP/1.1。
概述
Upgrade
标头字段可供客户端使用,以邀请服务器切换到一个(或多个)列出的协议,按优先级降序排列。
例如,客户端可能会发送一个 GET
请求,如所示,列出要切换到的首选协议(在本例中为 "example/1" 和 "foo/2")
http
GET /index.html HTTP/1.1
Host: www.example.com
Connection: upgrade
Upgrade: example/1, foo/2
注意:Connection: upgrade
必须在每次发送 Upgrade
时设置。
服务器可以选择忽略请求,出于任何原因,在这种情况下,它应该像没有发送 Upgrade
标头一样响应(例如,使用 200 OK
)。
如果服务器决定升级连接,则必须
- 发回一个
101 Switching Protocols
响应状态,其中包含一个指定正在切换到的协议的Upgrade
标头。例如httpHTTP/1.1 101 Switching Protocols Upgrade: foo/2 Connection: Upgrade
- 使用新协议向原始请求发送响应(服务器只能切换到它可以使用它来完成原始请求的协议)。
服务器还可以将标头作为 426
Upgrade Required
响应的一部分发送,以指示服务器不会使用当前协议执行请求,但如果协议更改,可能会执行。然后客户端可以使用上述过程请求协议更改。
主题 协议升级机制 提供了更多详细信息和示例。
语法
http
Connection: upgrade
Upgrade: protocol_name[/protocol_version]
注释
- 具有
upgrade
类型的Connection
标头必须始终与Upgrade
标头一起发送(如上所示)。 - 协议以逗号分隔列出,按优先级降序排列。协议版本是可选的。例如
http
Connection: upgrade
Upgrade: a_protocol/1, example, another_protocol/2.2
指令
- 任何逗号分隔的协议名称列表(每个名称都有可选的协议版本)
-
一个或多个带有可选版本的协议名称(用 "/" 分隔)。协议按优先级降序排列。
示例
http
Connection: upgrade
Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
http
Connection: Upgrade
Upgrade: websocket
规范
规范 |
---|
HTTP 语义 # field.upgrade |
HTTP 语义 # status.426 |
HTTP/2 # informational-responses |
浏览器兼容性
BCD 表仅在启用了 JavaScript 的浏览器中加载。
另请参阅
- 协议升级机制
101
Switching Protocol
426
Upgrade Required
Connection