1

ハンドシェイク要求なしで、JavaコードでWebSocket接続を作成することは可能ですか?

私は以下を使用してhandhsakeリクエストで1つを作成する方法を知っています:

  String request = "GET " + path + " HTTP/1.1\r\n"
            + "Upgrade: WebSocket\r\n" + "Connection: Upgrade\r\n"
            + "Host: " + host + "\r\n" + "Origin: " + origin + "\r\n"
            + extraHeaders.toString() + "\r\n";

しかし、私は上記を避けたいのですが、ソケット接続を開いたら、チャネルにフレームを送信したいだけですか?..これは可能ですか?

4

1 に答える 1

3

WebSocketハンドシェイクなしでWebSocket接続を作成することはできません。WebSocketのハンドシェイクとフレーミングは、プロトコルの重要な部分です。ハンドシェイクはHTTP互換であり、WebSocketが既存のWebインフラストラクチャとより簡単に対話できるようにします。特に、ハンドシェイクはセキュリティメカニズムを追加し、クロスオリジンリソースシェアリング(CORS)を可能にします。

ハンドシェイク後も、各WebSocketフレームは生データではありません。WebSocketはメッセージベースのプロトコルであるため、フレームヘッダーにはメッセージの描写、フレームの長さ、メッセージの種類(バイナリ、テキスト、pingなど)などが含まれます。また、クライアント(ブラウザー)からサーバーへのデータは、実行中のXORを使用してマスクする必要があります。マスク。これは、HTTP仲介者(プロキシ、HTTPキャッシュなど)の理論上の脆弱性を回避するためです。

名前の「ソケット」に惑わされないでください。WebSocketには、全二重、双方向、長寿命、低遅延など、生のTCPソケットの多くの利点がありますが、生のTCPソケットに階層化され、HTTP対応のハンドシェイクを使用するメッセージベースのトランスポートプロトコルです。

詳細については、公式のIETF6455WebSocket仕様を参照してください。

于 2012-09-13T13:11:16.393 に答える