2016-10-16 9 views
0

HTTPの場合、すべての要求を301応答でHTTPSにアップグレードできます。WebSocketをTLSにアップグレードする

ウェブソケットの場合、それほど簡単ではないようです。 ws://127.0.0.1リクエストをwss:/127.0.0.1にリダイレクトすると、websocket.orgのテストを使用してブラウザで「エラー:未定義」と表示されます(はい、証明書は信頼でき、wss if直接使用)。最初の要求が行われ、リダイレクトが送信されます。ただし、TLSポートには第2の要求はありません。

この仕様では、リダイレクトについてのみ簡単に説明しています。

  • wssからwssへのアップグレードは可能ですか?
  • リダイレクト応答があってもWebSocket固有のヘッダーを送信する必要がありますか? (現時点では、私はそうではありません。ハンドシェイクを完了する前にリダイレクトすることを仕様に挙げています)
  • 私が見逃していることは他にありますか?

答えて

1

For HTTP, it is possible to upgrade all requests to HTTPS with a 301 response.

(つべこべ)本当に要求のアップグレードが異なる要求につながる代わりにリダイレクトされません。ここでの仕様からの引用です。 websocket standard (RFC 6455)によると

Is upgrading ws to wss possible?

If the status code received from the server is not 101, the client handles the response per HTTP [RFC2616] procedures. In particular, the client might perform authentication if it receives a 401 status code; the server might redirect the client using a 3xx status code (but clients are not required to follow them), etc.

はそうです、いくつかのクライアントではなく、他の人がすることサポートされる可能性があります。たとえば、Firefoxでは関連するプロパティー network.websocket.auto-follow-http-redirectsはデフォルトでfalseになります。つまり、デフォルトではリダイレクトには従いません。

Do I need to send WebSocket specific headers even with the redirect response?

これらは、リダイレクトではなくwebsocketへのリクエストのアップグレードにのみ関係します。つまり、ヘッダーはアップグレードレスポンス(ステータスコード101)でのみ送信する必要があります。

+0

hm kay :(そして、知っておきたいことです。リダイレクト=>単純なHTTP/1.1 301 Moved Permanently \ r \ n場所:wss:// host:port/requestTarget?query \ r \ n \ r \ nは行く方法ですか?また、wssの代わりにhttpsに転送することもできますので、リダイレクトエンドポイントはwebsocketヘッダーを解析する必要はありません。実際に動作するリダイレクトを実行するためのより良いソリューションはありますか? – Etan

+0

@Etan :WebSocketクライアントがhttp(s)へのリダイレクトで何をすべきですか?websocketクライアントはwebsocketを話したがっていますが、ピアがそれをしないと(* "... websocketヘッダーを解析する必要はありません")、クライアントがwebsocketのリダイレクトをサポートしている場合、wss://へのリダイレクトは正常に動作するはずです –

+0

私は何を前提としていましたか?一般的なリダイレクト先のSSLエンドポイントを許可する例外があるかどうか彼らが他のポートにリダイレクトしているものについて気をつけてください。 WebSocketリクエストをwss://にリダイレクトし、クライアントが常にwssバージョンに直接アクセスできるようにクライアントを調整します。 – Etan

1

webSocketクライアントの実装が3xxステータスコードを処理するかどうかによって異なります。 webSocket specificationには、クライアントの実装が必要ありません。

If the status code received from the server is not 101, the client handles the response per HTTP [RFC2616] procedures. In particular, the client might perform authentication if it receives a 401 status code; the server might redirect the client using a 3xx status code (but clients are not required to follow them), etc. Otherwise, proceed as follows.

+0

同じ言い回しは、通常のHTTP 301応答です - ただし、すべての主要なブラウザは実際にリダイレクトを尊重します。 Webソケットの例外があるのは不思議です。 – Etan

関連する問題