WebsocketsクライアントAPIのHTTPヘッダー 質問する

WebsocketsクライアントAPIのHTTPヘッダー 質問する

これをサポートする任意の HTTP ヘッダー クライアントを使用して、Websocket クライアントにカスタム HTTP ヘッダーを追加するのは簡単なようですが、Web プラットフォームの API を使用してそれを実行する方法が見つかりませんWebSocket

それを達成する方法についての手がかりを持っている人はいますか?

var ws = new WebSocket("ws://example.com/service");

具体的には、HTTP Authorization ヘッダーを送信できる必要があります。

ベストアンサー1

2回更新

短い答え:いいえ、パスとプロトコル フィールドのみを指定できます。

より長い答え:

JavaScriptにはメソッドがありませんWebSocket API についてクライアント/ブラウザが送信する追加のヘッダーを指定します。HTTP パス ("GET /xyz") とプロトコル ヘッダー ("Sec-WebSocket-Protocol") は、WebSocket コンストラクターで指定できます。

Sec-WebSocket-Protocol ヘッダー (WebSocket 固有の認証で使用するために拡張される場合もあります) は、WebSocket コンストラクターのオプションの 2 番目の引数から生成されます。

var ws = new WebSocket("ws://example.com/path", "protocol");
var ws = new WebSocket("ws://example.com/path", ["protocol1", "protocol2"]);

上記の結果、次のヘッダーが生成されます。

Sec-WebSocket-Protocol: protocol

そして

Sec-WebSocket-Protocol: protocol1, protocol2

WebSocket 認証/承認を実現するための一般的なパターンは、チケット システムを実装することです。このシステムでは、WebSocket クライアントをホストしているページがサーバーにチケットを要求し、WebSocket 接続のセットアップ時に、URL/クエリ文字列、プロトコル フィールド、または接続確立後の最初のメッセージとして必要なチケットを渡します。サーバーは、チケットが有効 (存在する、まだ使用されていない、チケットにエンコードされたクライアント IP が一致している、チケットのタイムスタンプが最近のものであるなど) である場合にのみ、接続の続行を許可します。WebSocket のセキュリティ情報の概要は次のとおりです。https://devcenter.heroku.com/articles/websocket-security

以前は基本認証がオプションでしたが、これは非推奨となり、最近のブラウザでは指定されていてもヘッダーは送信されません。

基本認証情報 (非推奨 - 機能しなくなりました) :

注意: 以下の情報は、最新のブラウザでは正確ではありません。

Authorization ヘッダーは、WebSocket URI のユーザー名とパスワード (またはユーザー名のみ) フィールドから生成されます。

var ws = new WebSocket("ws://username:[email protected]")

上記の結果、文字列「username:password」が base64 でエンコードされた次のヘッダーが生成されます。

Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

Chrome 55 と Firefox 50 で基本認証をテストし、基本認証情報が実際にサーバーとネゴシエートされていることを確認しました (Safari では機能しない可能性があります)。

基本認証を提供してくれたDmitry Frankに感謝します答え

おすすめ記事