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

瀏覽器相容性

另見