本文爲 WebSocket 協議的第十一章,本文翻譯的主要內容爲 WebSocket 的 IANA 相關注意事項。html
有興趣瞭解該文檔以前幾章內容的同窗能夠見:web
ws
URI 定義了 WebSocket 服務器和資源名稱。安全
URI 協議名稱服務器
wswebsocket
狀態網絡
永久框架
URI 協議語法socket
使用 ABNF (RFC5234)語法和來自 URI 規範 RFC3986 的 ABNF 終端:ide
"ws:" "//" authority path-abempty [ "?" query ]post
path-abempty
和 query
RFC3986 部分組成了發送給服務端的資源名稱,來標記須要的服務類型。其餘的部分在 RFC3986 中定義了含義。
URI 協議含義
這個方案的惟一操做就是使用 WebSocket 協議打開一個鏈接。
編碼注意事項
按照上面定義的語法排除的主機部分中的字符必須按照 RFC3987 中的規定從 Unicode 轉換爲 ASCII 或其替換字符。爲了實現基於方案的規範化,國際化網域名稱(IDN)主機組件的形式與 punycode 碼之間的相互轉化認爲是等價的(見 RFC3987 第 5.3.3 節)。
除了由上面語法排除的字符外,其餘組件的字符在第一次轉換爲 UTF-8 字符時,必須從 Unicode 碼轉化到 ASCII 碼,而後使用百分比編碼格式替換對應的定義在 URI RFC3896 字符和國際化資源標識符(IRI) RFC3987 規範。
應用/協議使用這個 URI 協議規範
WebSocket Protocol
互操做性注意事項
使用 WebSocket 時須要使用 1.1 或者更高版本的 HTTP 協議。
安全性注意事項
見」安全性注意事項」一節。
聯繫
HYBI WG <hybi@ietf.org\\\>
做者/更改控制者
IETF <iesg@ietf.org\\\>
關聯
一個 wss
的 URI 定義了一個 WebSocket 服務器和資源名稱,代表經過這個連接的傳輸須要經過 TLS(包含標準的 TLS 能力例如數據保密性和完整性以及終端認證)來進行保護。
URI 協議名稱
wss
狀態
永久
URI 協議語法
使用 ABNF (RFC5234)語法和來自 URI 規範 RFC3986 的 ABNF 終端:
"wss:" "//" authority path-abempty [ "?" query ]
path-abempty
和 query
RFC3986 部分組成了發送給服務端的資源名稱,來標記須要的服務類型。其餘的部分在 RFC3986 中定義了含義。
URI 協議含義
這個方案的惟一操做就是使用 WebSocket 協議打開一個鏈接,經過 TLS 加密。
編碼注意事項
按照上面定義的語法排除的主機部分中的字符必須按照 RFC3987 中的規定從 Unicode 轉換爲 ASCII 或其替換字符。爲了實現基於方案的規範化,國際化網域名稱(IDN)主機組件的形式與 punycode 碼之間的相互轉化認爲是等價的(見 RFC3987 第 5.3.3 節)。
除了由上面語法排除的字符外,其餘組件的字符在第一次轉換爲 UTF-8 字符時,必須從 Unicode 碼轉化到 ASCII 碼,而後使用百分比編碼格式替換對應的定義在 URI RFC3896 字符和國際化資源標識符(IRI) RFC3987 規範。
應用/協議使用這個 URI 協議規範
WebSocket Protocol
互操做性注意事項
使用 WebSocket 時須要使用 1.1 或者更高版本的 HTTP 協議。
安全性注意事項
見」安全性注意事項」一節。
聯繫
HYBI WG <hybi@ietf.org\\\>
做者/更改控制者
IETF <iesg@ietf.org\\\>
關聯
這一節描述一個在 HTTP 升級憑證註冊的關鍵值,在 RFC2817 定義。
憑證名稱
WebSocket
做者/更改控制者
IETF <iesg@ietf.org\\\>
關聯
這一節描述一個註冊在永久消息頭字段名稱中的頭字段,在 RFC3864 定義。
頭字段名稱
Sec-WebSocket-Key
應用協議
http
狀態
標準
做者/更改控制者
IETF
說明文檔
關聯信息
這個頭字段只用於 WebSocket 開始握手。
Sec-WebSocket-Key
頭字段是用在 WebSocket 開始握手階段。它是經過客戶端發送給服務端,這部分信息用於服務端證實收到一個有效的 WebSocket 握手操做的認證。這能夠幫助確認服務端不會接收可能被用來向 WebSocket 服務任意發送數據的非 WebSocket 客戶端的鏈接(例如 HTTP 客戶端)。
Sec-WebSocket-Key
頭字段禁止在一個 HTTP 請求中出現屢次。
這一節描述一個註冊在永久消息頭字段名稱中的頭字段,在 RFC3864 定義。
頭字段名稱
Sec-WebSocket-Extensions
應用協議
http
狀態
標準
做者/更改控制者
IETF
說明文檔
關聯信息
這個頭字段只用於 WebSocket 開始握手。
Sec-WebSocket-Extensions
頭字段是用於 WebSocket 開始握手階段。它最開始是經過客戶端發送給服務端,而後經過服務端發送給客戶端,來對一個在鏈接中的協議級的擴展進行協商。
Sec-WebSocket-Extensions
頭字段可能會在一個 HTTP 請求中出現屢次(這個邏輯是等價於一個單獨的 Sec-WebSocket-Extensions
頭字段包含全部值)。然而,Sec-WebSocket-Extensions
頭字段在 HTTP 響應中不能出現超過1次。
這一節描述一個註冊在永久消息頭字段名稱中的頭字段,在 RFC3864 定義。
頭字段名稱
Sec-WebSocket-Accept
應用協議
http
狀態
標準
做者/更改控制者
IETF
說明文檔
關聯信息
這個頭字段只用於 WebSocket 開始握手。
Sec-WebSocket-Accpet
頭字段是用於 WebSocket 開始握手階段。它是經過服務端發送給客戶端,用來確認服務端會初始化一個 WebSocket 鏈接。
Sec-WebSocket-Accpet
頭在一個 HTTP 響應中不容許出現超過1次。
這一節描述一個註冊在永久消息頭字段名稱中的頭字段,在 RFC3864 定義。
頭字段名稱
Sec-WebSocket-Protocol
應用協議
http
狀態
標準
做者/更改控制者
IETF
說明文檔
關聯信息
這個頭字段只用於 WebSocket 開始握手。
Sec-WebSocket-Protocol
頭字段是用於 WebSocket 開始握手階段。它是從客戶端發送給服務端,而後從服務端返回給服務端來確認鏈接的子協議。這個機制可以讓雙方選擇一個子協議,同時向服務端確承認以支持這個子協議。
Sec-WebSocket-Protocol
頭字段能夠在一個 HTTP 請求中出現屢次(這個邏輯是等價於一個單獨的 Sec-WebSocket-Protocol
頭字段包含全部值)。然而, Sec-WebSocket-Protocol
頭字段在 HTTP 響應中不能出現超過1次。
這一節描述一個註冊在永久消息頭字段名稱中的頭字段,在 RFC3864 定義。
頭字段名稱
Sec-WebSocket-Version
應用協議
http
狀態
標準
做者/更改控制者
IETF
說明文檔
關聯信息
這個頭字段只用於 WebSocket 開始握手。
Sec-WebSocket-Version
頭字段是用於 WebSocket 開始握手階段。它是從客戶端發送給服務端來表示這個鏈接使用的協議版本。它可以讓服務端正確的進行開始握手和接下來的數據發送,以及在服務端不可以在一個安全方式下正確解析數據時關閉鏈接。Sec-WebSocket-Version
頭字段在服務端理解的版本不匹配從客戶端收到的版本致使的 WebSocket 握手失敗時,也從服務端發送給客戶端。在這種狀況下,這個頭字段包含服務端支持的協議版本。
注意這裏不指望更高的版本號須要向前兼容低版本號。
Sec-WebSocket-Version
頭字段能夠在一個 HTTP 響應中出現屢次(這個邏輯等價於一個單獨的Sec-WebSocket-Version
包含全部的值)。然而,Sec-WebSocket-Version
頭字段不能在 HTTP 請求中出現超過1次。
這個規範根據RFC5526中規定的原則爲 WebSocket 協議建立了一個新的 IANA 註冊表,用於 WebSocket 擴展名稱。
做爲此註冊表的一部分,IANA 包含了一下信息:
擴展定義
這個擴展的定義,將在 Sec-WebSocket-Extensions
頭字段中使用,在此規範的第 11.3.2 節註冊。這個值必須知足在此規範第 9.1 節中定義的擴展憑證要求。
擴展通用名
擴展名稱,通常稱爲擴展名。
擴展定義
對定義與 WebSocket 協議一塊兒使用的擴展的文檔的引用。
已知不兼容擴展
已知的不兼容的擴展定義列表。
WebSocket 擴展名是受到「先到先得」 IANA 註冊政策 RFC5226 限制的。
這個註冊表裏沒有初始值。
這個規範根據RFC5526中規定的原則爲 WebSocket 協議建立了一個新的 IANA 註冊表,用於 WebSocket 擴展名稱。
做爲此註冊表的一部分,IANA 包含了一下信息:
子協議定義
子協議的標識符將在 Sec-WebSocket-Protocol
頭字段中使用,在此規範的第 11.3.4 節中註冊。這個之必須符合此規範第 4.1 節中的第 10 項要求—換句話說,這個之必須是 RFC2616 中定義的憑證。
子協議通用名
子協議名稱,一般被稱爲子協議。
子協議定義
對定義與 WebSocket 協議一塊兒使用的子協議的文檔的引用。
WebSocket 子協議名是受到「先到先得」 IANA 註冊政策 RFC5226 限制的。
該規範根據 RFC5226 中規定的原則爲 WebSocket 協議建立了一個新的 IANA 註冊表,用於 WebSocket 版本號。
做爲此註冊表的一部分,IANA 包含了一下信息:
版本號
版本號是用於在此規範第 4.1 節中制定的 Sec-WebSocket-Version
字段。這個值必須是一個範圍在 0 到 255(含)之間的非負整數。
參考
RFC 請求新版本號或者帶有版本號的草稿名稱(見下文)。
狀態
臨時或者標準。見下面描述。
版本號被指定爲「臨時」或者「標準」。
「標準」的版本號被記錄在 RFC 文檔中,被認爲是一個重大、穩定的 WebSocket 協議版本,例如定義在這個 RFC 中的版本。「標準」版本號是受到 「IETF 評論」 IANA 註冊政策 RFC5526 限制的。
「臨時」版本是記錄在網絡草案和用於幫助實現者識別 WebSocket 協議的已部署版本並與之互操做,例如開發後可是發佈前的 RFC 版本。「臨時」版本號是受到 「專家評論」 IANA 註冊政策 RFC5526 、 最初的指定專家如HYBI 工做組主席(或者,若是工做組關閉,那麼是 IETF 應用領域的領域主任)限制的。
IANA 已經向註冊表中添加了以下的初始值。
版本號 | 引用 | 狀態 |
---|---|---|
0 | draft-ietf-hybi-thewebsocketprotocol-00 | 臨時 |
1 | draft-ietf-hybi-thewebsocketprotocol-01 | 臨時 |
2 | draft-ietf-hybi-thewebsocketprotocol-02 | 臨時 |
3 | draft-ietf-hybi-thewebsocketprotocol-03 | 臨時 |
4 | draft-ietf-hybi-thewebsocketprotocol-04 | 臨時 |
5 | draft-ietf-hybi-thewebsocketprotocol-05 | 臨時 |
6 | draft-ietf-hybi-thewebsocketprotocol-06 | 臨時 |
7 | draft-ietf-hybi-thewebsocketprotocol-07 | 臨時 |
8 | draft-ietf-hybi-thewebsocketprotocol-08 | 臨時 |
9 | 保留 | |
10 | 保留 | |
11 | 保留 | |
12 | 保留 | |
13 | RFC6455 |
該規範根據 RFC5226 中規定的原則爲 WebSocket 協議建立了一個新的 IANA 註冊表,用於 WebSocket 關閉碼。
做爲此註冊表的一部分,IANA 包含了一下信息:
狀態碼
狀態碼錶示定義在此文檔第 7.4 節中 WebSocket 鏈接關閉的緣由。這個狀態碼是一個在 1000 到 4999(含)之間的整數。
含義
狀態碼含義。每個狀態碼有一個特定的含義。
聯繫
保留狀態代碼的實體的聯繫人。
關聯
請求狀態碼的固定文檔和含義定義。對於 1000-2999 的狀態碼來講是必須的,推薦使用 3000-3999 範圍的狀態碼。
WebSocket 關閉狀態碼根據它的範圍有不一樣的註冊要求。使用在這個協議和它的後續的版本或者擴展的請求版本號是受到「標準行爲」、「規範要求」(這意味着「指定專家」)或者「IESG 評論」 IANA註冊表政策限制的,應該在 1000-2999 範圍內受權。被類庫、框架和應用使用的狀態碼是受限制於「先到先得」IANA 註冊表政策,應該在 3000-3999 範圍內受權。4000-4999 範圍的狀態碼是私用的。請求應指明它們是否正在經過擴展、類庫、框架或者應用使用請求WebSocket協議的狀態代碼(或者未來的協議的版本)。
IANA已經向註冊表中添加了以下初始值。
狀態碼 | 含義 | 聯繫人 | 關聯 |
---|---|---|---|
1000 | 正常關閉 | hybi@ietf.org | RFC6455 |
1001 | 離開 | hybi@ietf.org | RFC6455 |
1002 | 協議錯誤 | hybi@ietf.org | RFC6455 |
1003 | 不支持的數據類型 | hybi@ietf.org | RFC6455 |
1004 | 保留 | hybi@ietf.org | RFC6455 |
1005 | 沒有收到狀態碼 | hybi@ietf.org | RFC6455 |
1006 | 異常關閉 | hybi@ietf.org | RFC6455 |
1007 | 無效的幀數據 | hybi@ietf.org | RFC6455 |
1008 | 違反政策 | hybi@ietf.org | RFC6455 |
1009 | 消息太大 | hybi@ietf.org | RFC6455 |
1010 | 強制擴展 | hybi@ietf.org | RFC6455 |
1011 | 內部服務器錯誤 | hybi@ietf.org | RFC6455 |
1015 | TLS握手 | hybi@ietf.org | RFC6455 |
該規範根據 RFC5226 中規定的原則爲 WebSocket 協議建立了一個新的 IANA 註冊表,用於 WebSocket 操做碼。
做爲此註冊表的一部分,IANA 包含了一下信息:
操做碼
操做碼錶示定義在第 5.2 節中的 WebSocket 幀的幀類型。操做碼是一個範圍在 0 到 15(含)的數字。
含義
操做碼的含義。
關聯
請求操做碼的規範。
WebSocket 操做碼是受到「標準行爲」IANA 註冊表政策 RFC5266 限制的。
IANA 已經向註冊表中註冊了一下初始值。
操做碼 | 含義 | 關聯 |
---|---|---|
0 | 連續幀 | RFC6455 |
1 | 文本幀 | RFC6455 |
2 | 二進制幀 | RFC6455 |
8 | 鏈接關閉幀 | RFC6455 |
9 | 心跳 Ping 幀 | RFC6455 |
10 | 心跳 Pong 幀 | RFC6455 |
該規範根據 RFC5226 中規定的原則爲 WebSocket 協議建立了一個新的 IANA 註冊表,用於 WebSocket 幀頭 bit 字段。這個註冊表控制分配的 bit 位爲第 5.2 節中的 RSV一、RSV2 和 RSV3。
這些 bit 位是保留給未來的版本或者文檔中的擴展。
WebSocket 幀頭 bit 字段是受到「標準行爲」IANA 註冊表政策 RFC5266 限制的。