升級
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 的瀏覽器中載入。
另請參閱
- 協議升級機制
101Switching Protocol426Upgrade RequiredConnection