28

Web ソケットは、プロキシ サーバーの存在を検出し、プロキシを通過するようにトンネルを自動的に設定します。トンネルは、HTTP CONNECT ステートメントをプロキシ サーバーに発行することによって確立されます。このステートメントは、プロキシ サーバーが特定のホストおよびポートへの TCP/IP 接続を開くように要求します。トンネルが設定されると、通信はプロキシ経由で妨げられずに流れることができます。HTTP/S は同様の方法で動作するため、SSL 上のセキュア Web ソケットは同じ HTTP CONNECT 技術を利用できます。[1]

わかりました、役に立ちますね! しかし、これまでに見たクライアントの実装 (Go [2]、Java [3]) では、プロキシ検出に関連するものは何も見当たりません。

何か不足していますか、それともこれらの実装はまだ若いですか? WebSockets は非常に新しいものであり、クライアントの実装も同様に新しく未熟である可能性があることを私は知っています。プロキシの検出と処理について何か不足しているかどうかを知りたいだけです。

[1] http://www.kaazing.org/confluence/display/KAAZING/What+is+an+HTML+5+WebSocket

[2] http://golang.org/src/pkg/websocket/client.go

[3] http://github.com/adamac/Java-WebSocket-client/raw/master/src/com/sixfire/websocket/WebSocket.java

4

6 に答える 6

44

あなたが遭遇したかもしれないさまざまな成功率を説明しようとしましょう. HTML5 Web ソケット プロトコル自体はプロキシ サーバーやファイアウォールを認識しませんが、HTTP サーバーがデフォルトの HTTP および HTTPS ポート (80 および 443) を Web ソケット ゲートウェイまたはサーバーと共有できるように、HTTP 互換のハンドシェイクを備えています。

Web ソケット プロトコルでは、ws:// および wss:// プレフィックスを定義して、それぞれ WebSocket および WebSocket セキュア接続を示します。どちらのスキームも、HTTP アップグレード メカニズムを使用して Web ソケット プロトコルにアップグレードします。一部のプロキシ サーバーは無害であり、Web ソケットで正常に動作します。他のものは、Web ソケットが正しく機能しなくなり、接続が失敗する原因となります。場合によっては、追加のプロキシ サーバー構成が必要になることがあります。また、Web ソケットをサポートするために、特定のプロキシ サーバーをアップグレードする必要がある場合があります。

暗号化されていない WebSocket トラフィックが WebSocket サーバーへの途中で明示的または透過的なプロキシ サーバーを通過する場合、プロキシ サーバーが本来の動作をするかどうかに関係なく、現在、接続はほぼ確実に失敗します (将来的には、プロキシ サーバーが失敗する可能性があります)。 Web Socket 対応になります)。したがって、暗号化されていない WebSocket 接続は、最も単純なトポロジでのみ使用する必要があります。

暗号化された WebSocket 接続が使用されている場合、Web Sockets Secure 接続で Transport Layer Security (TLS) を使用すると、ブラウザが明示的なプロキシ サーバーを使用するように構成されている場合に、HTTP CONNECT コマンドが確実に発行されます。これにより、Web Sockets Secure クライアントと WebSocket サーバーの間に、HTTP プロキシを介した低レベルのエンドツーエンド TCP 通信を提供するトンネルが設定されます。透過プロキシ サーバーの場合、ブラウザはプロキシ サーバーを認識しないため、HTTP CONNECT は送信されません。ただし、ワイヤ トラフィックは暗号化されているため、中間の透過的なプロキシ サーバーは暗号化されたトラフィックの通過を許可する可能性があるため、Web ソケット セキュアを使用すると、WebSocket 接続が成功する可能性がはるかに高くなります。もちろん、暗号化の使用は無料ではありませんが、多くの場合、最高の成功率が得られます。

実際の動作を確認する方法の 1 つは、Kaazing WebSocket ゲートウェイをダウンロードしてインストールすることです。これは、高度に最適化されたプロキシ対応の WebSocket ゲートウェイであり、ネイティブの WebSocket サポートと、古いブラウザーの標準の完全なエミュレーションを提供します。

于 2010-02-18T19:03:25.133 に答える
2

答えは、これらのクライアントがプロキシをサポートしていないということです。-オッカム

于 2010-02-19T04:36:33.357 に答える
1

通信チャネルは、WebSocket プロトコルがシーンに入るまでに既に確立されています。WebSocket は TCP と HTTP の上に構築されているため、プロキシを含むこれらのプロトコルによって既に行われていることを気にする必要はありません。

WebSocket 接続が確立されると、常に HTTP/TCP 接続で開始されます。この接続は、後で WebSocket の「ハンドシェイク」フェーズ中に「アップグレード」されます。この時点でトンネルが確立されるため、プロキシは透過的であり、気にする必要はありません。

于 2010-02-04T21:35:53.563 に答える
0

websocket-clientPython パッケージである は、少なくとも安全なスキームwss://を介してプロキシをサポートしています。

https://github.com/liris/websocket-client/commit/9f4cdb9ec982bfedb9270e883adab2e028bbd8e9

于 2014-12-10T10:55:27.913 に答える