[解決済み】WebsocketクライアントAPIのHTTPヘッダーについて
質問
ウェブソケットクライアントにカスタムHTTPヘッダーを追加するには、これをサポートするHTTPヘッダークライアントを使用すると簡単なようですが、JSON APIでそれを行う方法を見つけることができません。
それでも、サポートがあるはずだと思われる これらのヘッダは仕様に .
どなたか、実現するための手がかりをお持ちの方はいらっしゃいませんか?
var ws = new WebSocket("ws://example.com/service");
具体的には、HTTP Authorizationヘッダを送信できるようにする必要があります。
どのように解決するのですか?
2回目の更新
簡潔にお答えします。 いいえ、指定できるのはpathとprotocolのフィールドのみです。
回答が長くなりました。
JavaScript にはメソッドはありません。 ウェブソケットAPI クライアント/ブラウザが送信する追加ヘッダを指定するためのものです。HTTP パス ("GET /xyz") とプロトコル ヘッダー ("Sec-WebSocket-Protocol") は、WebSocket のコンストラクタで指定できます。
Sec-WebSocket-Protocol ヘッダー (ウェブソケット固有の認証で使用するために拡張されることがあります) は、ウェブソケットコンストラクタのオプションの第 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
以前はBasic認証がオプションとしてありましたが、これは非推奨となり、最近のブラウザでは指定されてもヘッダーは送信されません。
基本認証情報 (非推奨 - 機能停止中) :
注:以下の情報は、どのモダンブラウザでも正確ではなくなりました。
Authorizationヘッダーは、WebSocket URIのユーザー名とパスワード(またはユーザー名のみ)フィールドから生成されます。
var ws = new WebSocket("ws://username:[email protected]")
上記の結果、文字列 "username:password" がbase64エンコードされた以下のヘッダが生成されます。
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Chrome 55とFirefox 50でBasic Authをテストし、Basic Auth情報が確かにサーバとネゴシエートされることを確認しました(Safariではうまくいかないかもしれません)。
Dmitry Frank's の基本認証に感謝します。 回答
関連
-
[解決済み】SecurityError: オリジンを持つフレームがクロスオリジンフレームにアクセスするのをブロックした
-
[解決済み】Android 8:クリアテキストのHTTPトラフィックが許可されない
-
[解決済み] HTTP GET(リクエストボディ付き
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み] HTTP POSTリクエストでは、どのようにパラメータが送信されるのですか?
-
[解決済み] updateとdeleteのHTTPステータスコード?
-
[解決済み] カスタムHTTPヘッダー:命名規則
-
[解決済み] WebSocketとサーバー送信型イベントの比較/EventSource
-
[解決済み] HTTPヘッダーの大文字と小文字は区別されますか?
-
[解決済み】HTTPのPOSTとPUTの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Heroku:ノードアプリで「このアプリにはデフォルトの言語が検出されませんでした」エラーがスローされる
-
[解決済み】 Uncaught TypeError: data.push is not a function
-
[解決済み] Uncaught Invariant Violation: 前のレンダリング中よりも多くのフックをレンダリングした
-
[解決済み】webpack: モジュールが見つかりません。Error: 解決できない(相対パスで)
-
[解決済み】Javascriptのコールバック関数がFirefoxで「Callback is not a function」というエラーを投げる
-
[解決済み】別のjsファイル内でJavaScriptの関数を呼び出す
-
[解決済み】DOMException: サポートされているソースが見つからなかったため、読み込みに失敗しました。
-
[解決済み】FirefoxでGoogle Maps V3をリモートで使用すると「googleが定義されていません」と表示される。
-
[解決済み】このオブジェクトの "forEach "はなぜ関数でないのですか?
-
[解決済み] HTTPSのURLは暗号化されていますか?