升级

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)。

如果服务器决定升级连接,则必须

  1. 发回一个 101 Switching Protocols 响应状态,其中包含一个指定正在切换到的协议的 Upgrade 标头。例如
    http
    HTTP/1.1 101 Switching Protocols
    Upgrade: foo/2
    Connection: Upgrade
    
  2. 使用新协议向原始请求发送响应(服务器只能切换到它可以使用它来完成原始请求的协议)。

服务器还可以将标头作为 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 的浏览器中加载。

另请参阅