私は WebClient ライブラリを構築しています。CONNECT
現在、プロキシ機能を実装しているため、いくつかの調査を行っており、メソッドを使用して URL を要求するコードを見ました。
しかし、私の Web ブラウザーで確認すると、メソッドは使用されず、CONNECT
代わりに GET メソッドが呼び出されます。
だから私は混乱しています。いつ両方の方法を使用する必要がありますか?
私は WebClient ライブラリを構築しています。CONNECT
現在、プロキシ機能を実装しているため、いくつかの調査を行っており、メソッドを使用して URL を要求するコードを見ました。
しかし、私の Web ブラウザーで確認すると、メソッドは使用されず、CONNECT
代わりに GET メソッドが呼び出されます。
だから私は混乱しています。いつ両方の方法を使用する必要がありますか?
CONNECT リクエストは、プロキシにリモート エンドポイントへの HTTP トンネルを確立するように促します。 通常は SSL 接続に使用されますが、HTTP でも使用できます (プロキシ チェーンとトンネリングの目的で使用されます)。
CONNECT www.google.com:443
上記の行は、プロキシからポート 443 で www.google.com への接続を開きます。この後、クライアントから送信されたコンテンツは、プロキシによって に転送されwww.google.com:443
ます。
ユーザーがページhttp://www.google.comを取得しようとすると、プロキシはまったく同じリクエストを送信し、ユーザーに代わってレスポンスを取得できます。
SSL (HTTPS) では、2 つのリモート エンドポイントのみが要求を理解し、プロキシはそれらを解読できません。したがって、CONNECT を使用してそのトンネルを開き、2 つのエンドポイント (Web サーバーとクライアント) が互いに直接通信できるようにするだけです。
プロキシ チェーン:
2 つのプロキシ サーバーをチェーンしている場合、これは発行される要求のシーケンスです。
GET1 is the original GET request (HTTP URL)
CONNECT1 is the original CONNECT request (SSL/HTTPS URL or Another Proxy)
User Request ==CONNECT1==> (Your_Primary_Proxy ==CONNECT==> AnotherProxy-1 ... ==CONNECT==> AnotherProxy-n) ==GET1(IF is http)/CONNECT1(IF is https)==> Destination_URL
経験則として、GET はプレーン HTTP に使用され、CONNECT は HTTPS に使用されます。
ただし、詳細があるため、おそらく関連する RFC を読みたいと思うでしょう。
http://www.ietf.org/rfc/rfc2068.txt http://www.ietf.org/rfc/rfc2817.txt