
基本的なプロキシと、プロキシが接続を透過的に宛先に転送する方法については知っています。ただ、プロキシの連鎖がどのように機能するのか理解できませんでした。
たとえば、次のようなチェーンがあります: proxy1 -> proxy2 -> proxy3 -> proxy4 -> destination
。
通常の単一プロキシと同様に、リクエストはプロキシに送信され、プロキシはそれを宛先に転送し、応答を返します。しかし、プロキシ チェーンでは、リクエストを宛先に直接転送するのではなく、 などに転送するproxy1
必要があることを はどのようにして知るのでしょうか。proxy2
これは、プロキシ チェーンに送信するリクエスト内の何らかのヘッダーが、プロキシにリクエストを次のプロキシに転送するように適切に指示するためでしょうか。
答え1
このメカニズムでは、クライアントは HTTP プロキシ サーバーに TCP 接続を目的の宛先に転送するように要求します。サーバーはクライアントに代わって接続を行います。サーバーによって接続が確立されると、プロキシ サーバーはクライアントとの間で TCP ストリームをプロキシし続けます。最初の接続要求のみが HTTP であることに注意してください。その後、サーバーは確立された TCP 接続をプロキシするだけです。
最後の文が鍵です。proxy1
への接続をプロキシするように要求しますproxy2
。その後、後続のすべては を経由proxy2
してに渡されますproxy1
が、 はそれ以上解釈しません。そこで にプロキシするように要求しproxy3
、この要求は によってキャッチされ、解釈されます。proxy2
次の CONNECT 要求 ( にプロキシするproxy4
) は と を通過しproxy1
、proxy2
によって解釈されますproxy3
。以下同様に続きます。チェーン内のすべてのプロキシは を解釈します。ちょうど1つCONNECT 要求の場合は透過的になります。
すべてのプロキシが一連の初期パケットによって適切に設定されると、双方向 TCP 接続を使用するものはすべて CONNECT トンネルを通過できるようになります。
注意してください
すべての HTTP プロキシ サーバーがこの機能をサポートしているわけではなく、サポートしているサーバーでも動作が制限される場合があります。
最後に注意: 実験中に、実行するプログラムがCONNECTではなくGETを使用している場合、プロキシのチェーンに問題が発生する可能性があります。GETはチェーンを許可しません。これはカバーされていますここプロキシ チェーンに関する混乱は、GET メカニズムに慣れている (つまり、GET メカニズムの観点から考えている) ことが原因である可能性があります。