Upgrade 首部
HTTP Upgrade 請求和響應首部可以用於將已建立的客戶端/伺服器連線升級到不同的協議(在相同的傳輸協議上)。例如,客戶端可以使用它將連線從 HTTP/1.1 升級到 HTTP/2,或者將 HTTP(S) 連線升級到 WebSocket 連線。
警告: HTTP/2 明確禁止使用此機制和首部;它僅限於 HTTP/1.1。
語法
Upgrade: <protocol>[/<protocol_version>]
Upgrade: <protocol>[/<protocol_version>], …, <protocolN>[/<protocol_versionN>]
指令
<協議>-
協議按降序優先順序以逗號分隔列出。
<protocol_version>可選-
可以在協議版本前加上一個
/斜槓來提供一個可選的協議版本。
描述
Upgrade 首部欄位可用於客戶端邀請伺服器切換到所列協議中的一個(或多個),按降序優先順序排列。例如,客戶端可能會發送一個 GET 請求,如下所示,列出首選要切換的協議(在此示例中為 example/1 和 foo/2):
GET /index.html HTTP/1.1
Host: www.example.com
Connection: upgrade
Upgrade: example/1, foo/2
注意: 型別為 upgrade 的 Connection 首部始終必須與 Upgrade 首部一起傳送。
伺服器可以出於任何原因忽略該請求,在這種情況下,它應該像沒有傳送 Upgrade 首部一樣響應(例如,使用 200 OK)。如果伺服器將升級連線,它必須:
-
返回一個
101 Switching Protocols響應狀態,其中包含一個Upgrade首部,該首部指定要切換到的協議。例如:httpHTTP/1.1 101 Switching Protocols Upgrade: foo/2 Connection: Upgrade -
使用新協議響應原始請求(伺服器只能切換到可以完成原始請求的協議)。
伺服器還可以將此首部作為 426 Upgrade Required 響應的一部分發送,以指示伺服器不會使用當前協議執行請求,但如果更改協議則可能會執行。然後客戶端可以按照上述過程請求更改協議。
更多細節和示例請參見主題 協議升級機制。
示例
帶多個協議的 Upgrade 首部
以下請求按降序優先順序列出了多個協議:
Connection: upgrade
Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
升級到 WebSocket
這是開始將 HTTP 連線升級到 WebSocket 的常用首部組合。有關更多資訊,請參閱升級到 WebSocket 連線。
Connection: Upgrade
Upgrade: websocket
規範
| 規範 |
|---|
| HTTP 語義 # field.upgrade |
| HTTP 語義 # status.426 |
| HTTP/2 # informational-responses |
瀏覽器相容性
載入中…