2017-12-01 26 views
1

同じJS WebSocket APIはありません。私の主な目的は、JS web-socketclientからresourceIdroutingInfoauth-token、などの情報をサーバーに送信することです。JavaScript WebSocketクライアントからサーバーにカスタムヘッダーを送信する方法は?

私は以下のアプローチを考えることができます。

  1. たちは、クライアントからのカスタムヘッダーを送信するためにクッキーを使用して、サーバ側でそれらを取得することができます。私のアプローチは大丈夫ですか、他のより良い方法がある場合は親切に考えを共有?

  2. web-storage APIをブラウザに保存してサーバー側で取得することはできますか?

PS:私はあなたがブラウザからのWebSocket接続の話をしていると仮定すると、Javaベースのサーバー

答えて

2

を使用しています、ここで追加の「ヘッダ様」の情報を送信するためのあなたの伝統的な選択肢があります。

  1. auth-tokenを除くすべての場合に問題のない初期URLのクエリパラメータとしてエンコードできます。
  2. WebSocket接続の接続元がWebページの発信元と同じ場合は、パラメータをCookieに入れることができます。これらのCookieは、元のwebSocket接続要求とともに送信されます。接続要求。
  3. サーバーとの「条件付き」webSocket接続を作成し、その後のwebSocketメッセージで資格情報を送信できます。サーバー上のセキュリティを実装して、条件付きで接続されたwebSocketが認証を除いて何かをすることを許可されず、適切な資格情報がまもなく届かなければ接続をタイムアウトさせるようにする必要があります。

webSocketのブラウザインターフェイスでは、webSocket接続を開始する最初のHTTPリクエストでカスタムヘッダーを使用できません。これらのカスタムヘッダーは、他の種類のクライアントからも可能です。webSocket接続のブラウザインターフェイスにはその機能がありません。

ウェブストレージAPIをブラウザに保存して取得することはできますか?

ウェブページのJavascriptは、ウェブストレージAPIを使用してブラウザにデータを保存することができ、同じ原点のページの別のスクリプトからデータを後で取得できます。そのデータはサーバーで使用できません。クライアント内でのみ使用できます。

+0

お返事ありがとうございます@ jfriend00。セキュリティ上の問題のためにクエリパラメータとして送信する必要はありません。 もう1つの明確化が必要です。ウェブストレージAPIにデータを設定すると、サーバー側でもデータを取得できますか? – rahul

+0

@rahul - いいえ。ウェブストレージAPIはクライアント側のストレージのみです。クライアントからアクセスできるのは、ローカルコンピュータのファイルシステムのブラウザに保存されている場合のみです。 – jfriend00

+1

@rahul - FYI、webSocket接続を保護するためにSSLを使用している場合、URL自体(インクルードクエリパラメータ)は受信側のサーバー以外のユーザーには表示されません。 – jfriend00

関連する問題