2013-10-24 10 views
9

Websocketは、ハンドシェイクを有効なHTTPアップグレード要求にすることによって、サーバーがHTTPサーバーとポートを共有できるように設計されています。WebSocketがHTTPを使用してオープニングハンドシェイクを必要とするのはなぜですか?なぜそれは独立したプロトコルではありませんか?

私はこのデザイン哲学に疑念があります。 WebSocketプロトコルが独立したTCPベースのプロトコルであれば、どのような方法でも構いません。

なぜこのHTTPハンドシェイク(アップグレード要求)とプロトコル切り替えが必要なのでしょうか。代わりになぜ私たちは直接(&独立して)プロトコルのようなウェブソケットに従うことができませんか?

+0

これを読んでください:http://tools.ietf.org/html/rfc6455#section-1.2 – haim770

+2

こんにちは、私はこれをすでに読んでいますが、乾草の積み重ねに針を見つけるのとはちょっと違いました。だから私は答えが隠されている正確な文を置くだろう "単一のIPアドレスと単一のホスト名へのすべてのトラフィックのための単一のサーバーで比較的簡単な設定で、これ(HTTPハンドシェイク)は、WebSocketプロトコル配備する。 Ref:http://tools.ietf.org/html/rfc6455#section-1.8 – ratul

答えて

13

IETF 6455 WebSocket specから引用する:すなわち

The WebSocket Protocol attempts to address the goals of existing 
bidirectional HTTP technologies in the context of the existing HTTP 
infrastructure; as such, it is designed to work over HTTP ports 80 
and 443 as well as to support HTTP proxies and intermediaries, even 
if this implies some complexity specific to the current environment. 
However, the design does not limit WebSocket to HTTP, and future 
implementations could use a simpler handshake over a dedicated port 
without reinventing the entire protocol. 

を、既に(プロキシ、ファイアウォール、キャッシュ、および他の仲介)の存在HTTPおよびHTTPS用の膨大なインフラストラクチャがあります。 WebSocketプロトコルは、幅広く採用される可能性を高めるため、専用ポートで新しいプロトコルをサポートするために、最初からすべてを再作成することなく、既存インフラストラクチャの調整と拡張を可能にするように設計されています。

WebSocketプロトコルがHTTP互換のハンドシェイクを取り除いても、ブラウザとサーバーがそれぞれを検証できるように、最新のWebのセキュリティ要件をサポートするためにはほぼ同等の複雑さのハンドシェイクが必要になることにも注意してくださいCORS(クロスオリジン要求の共有)を安全にサポートすることができます。 「生の」フラッシュソケットでさえ、実際のソケットを作成する前に、セキュリティポリシー要求を介してサーバーとのハンドシェイクを行います。

+0

プロトコルを理解しようとしていました。あなたの答えは本当に役に立ちました。 WebSocketを扱うための新しいポートとアプリケーションの使用を考えました。あなたの答えで私はWebSocketプロトコルを処理するためにもApacheを使うことができると思います。しかし、WSデータフレームを処理できる既存のapacheモジュールはありますか?これを実装するのに役立つ提案やリンクがありますか? – ratul

+0

websocket extensionsには、https/1.1、SPDY、HTTP/2のようなhttpパスを介してwebsocketがアップグレードとして設定されていると仮定しています。たとえば、mux拡張には、HTTP要求が正しく機能することを期待するaddChannelロジックがあります。 –

関連する問題