Sec-WebSocket-Protocol ヘッダー
Baseline
広く利用可能
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2015年7月以降、すべてのブラウザーで利用可能です。
HTTP の Sec-WebSocket-Protocol リクエスト・レスポンスヘッダーは、WebSocket の接続確立ハンドシェイクにおいて、通信に使用するサブプロトコルを交渉するために使用されます。
このプロトコルは、SOAP や WAMP のような広く認知されているプロトコルであることも可能であり、クライアントとサーバー間で共通の理解がある独自のプロトコルであることも可能です。
リクエストにおいて、ヘッダーには、ウェブアプリケーションが使用したい WebSocket サブプロトコルが、優先順位の高い順に 1 つ以上指定されます。 これらは、複数のヘッダーにプロトコル値として追加することも、単一のヘッダーにカンマ区切りの値として追加することもできます。
レスポンスでは、サーバーが選択したサブプロトコルが指定されます。 これは、リクエストヘッダーで指定されたリストの中から、サーバーが対応している最初のサブプロトコルでなければなりません。
リクエストヘッダーは、アプリケーションが WebSocket() の protocols 引数で指定した値を用いて、ブラウザーによって自動的に追加・設定されます。
サーバーによって選択されたサブプロトコルは、WebSocket.protocol を通じてウェブアプリケーションから利用可能です。
| ヘッダー種別 | リクエストヘッダー, レスポンスヘッダー |
|---|---|
| 禁止リクエストヘッダー | はい (Sec- 接頭辞) |
構文
Sec-WebSocket-Protocol: <sub-protocols>
ディレクティブ
<sub-protocols>-
優先順位の高い順に、サブプロトコル名をカンマ区切りで列挙したものです。 サブプロトコルは、IANA WebSocket サブプロトコル名レジストリー から選択することも、クライアントとサーバーの間で共通に理解されている独自の名前とすることもあります。
レスポンスヘッダーとしては、これはサーバーが選択した単一のサブプロトコルです。
例
>WebSocket 接続確立ハンドシェイク
このサブプロトコルは、WebSocket のオリジナル仕様におけるハンドシェイクリクエストで定義されていません。
下記のリクエストは、クライアントが soap を推奨するが、wamp にも対応していることを示しています。
GET /chat HTTP/1.1
Host: example.com:8000
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
Sec-WebSocket-Protocol: soap, wamp
次のようプロトコルを指定しても、同様の効果が得られます。
Sec-WebSocket-Protocol: soap
Sec-WebSocket-Protocol: wamp
サーバーからのレスポンスには Sec-WebSocket-Protocol ヘッダーが含まれており、クライアントの環境設定から、サーバーが対応している最初のサブプロトコルが選択されます。
下記に soap として表示されます。
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: soap
仕様書
| 仕様書 |
|---|
| The WebSocket Protocol> # section-11.3.4> |