このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

Sec-WebSocket-Protocol ヘッダー

Baseline 広く利用可能

この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2015年7月以降、すべてのブラウザーで利用可能です。

HTTP の Sec-WebSocket-Protocol リクエストレスポンスヘッダーは、WebSocket の接続確立ハンドシェイクにおいて、通信に使用するサブプロトコルを交渉するために使用されます。 このプロトコルは、SOAP や WAMP のような広く認知されているプロトコルであることも可能であり、クライアントとサーバー間で共通の理解がある独自のプロトコルであることも可能です。

リクエストにおいて、ヘッダーには、ウェブアプリケーションが使用したい WebSocket サブプロトコルが、優先順位の高い順に 1 つ以上指定されます。 これらは、複数のヘッダーにプロトコル値として追加することも、単一のヘッダーにカンマ区切りの値として追加することもできます。

レスポンスでは、サーバーが選択したサブプロトコルが指定されます。 これは、リクエストヘッダーで指定されたリストの中から、サーバーが対応している最初のサブプロトコルでなければなりません。

リクエストヘッダーは、アプリケーションが WebSocket()protocols 引数で指定した値を用いて、ブラウザーによって自動的に追加・設定されます。 サーバーによって選択されたサブプロトコルは、WebSocket.protocol を通じてウェブアプリケーションから利用可能です。

ヘッダー種別 リクエストヘッダー, レスポンスヘッダー
禁止リクエストヘッダー はい (Sec- 接頭辞)

構文

http
Sec-WebSocket-Protocol: <sub-protocols>

ディレクティブ

<sub-protocols>

優先順位の高い順に、サブプロトコル名をカンマ区切りで列挙したものです。 サブプロトコルは、IANA WebSocket サブプロトコル名レジストリー から選択することも、クライアントとサーバーの間で共通に理解されている独自の名前とすることもあります。

レスポンスヘッダーとしては、これはサーバーが選択した単一のサブプロトコルです。

WebSocket 接続確立ハンドシェイク

このサブプロトコルは、WebSocket のオリジナル仕様におけるハンドシェイクリクエストで定義されていません。 下記のリクエストは、クライアントが soap を推奨するが、wamp にも対応していることを示しています。

http
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

次のようプロトコルを指定しても、同様の効果が得られます。

http
Sec-WebSocket-Protocol: soap
Sec-WebSocket-Protocol: wamp

サーバーからのレスポンスには Sec-WebSocket-Protocol ヘッダーが含まれており、クライアントの環境設定から、サーバーが対応している最初のサブプロトコルが選択されます。 下記に soap として表示されます。

http
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

ブラウザーの互換性

関連情報