ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript で WebSocket クライアント接続に認証などのカスタム HTTP ヘッダーを追加するにはどうすればよいですか?

JavaScript で WebSocket クライアント接続に認証などのカスタム HTTP ヘッダーを追加するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-30 08:13:14646ブラウズ

How Can I Add Custom HTTP Headers, Such as Authorization, to a WebSocket Client Connection in JavaScript?

WebSocket クライアント API の HTTP ヘッダー

この機能をサポートする HTTP ヘッダー クライアントを使用して、HTTP ヘッダーをカスタマイズします。 WebSocket クライアントですが、ネットワーク プラットフォームの WebSocket API を使用してこれを行う方法が見つかりません。

実装方法を知っている人はいますか?

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

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

更新

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

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

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 クライアントをホストするページがサーバーからのチケットを要求するチケット システムを実装することです。このチケットは、接続セットアップ中に、URL/クエリ文字列、プロトコル フィールド、または接続確立後の最初のメッセージとして指定することによって渡されます。その後、サーバーは、チケットが有効な場合 (存在する、使用されていない、チケット内でエンコードされたクライアント IP が一致する、チケット内のタイムスタンプが新しいなど) にのみ接続の継続を許可します。 WebSocket のセキュリティ情報の概要は次のとおりです: https://devcenter.heroku.com/articles/websocket-security。

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

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

Authorization ヘッダーは、WebSocket URI からのユーザー名とパスワード (または単にユーザー名) フィールドです 生成:

var ws = new WebSocket("ws://username:password@")

上記のコードはbase64で生成されています次のヘッダーを文字列「username:password」としてエンコードします:

Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

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

基本認証の回答については、Dmitry Frank に感謝します。

以上がJavaScript で WebSocket クライアント接続に認証などのカスタム HTTP ヘッダーを追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。