升級

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 的瀏覽器中載入。

另請參閱