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
TL; DR Webクライアントは、プロキシと通信し、最終URIがhttps://
で始まることがわかっている場合にのみCONNECTを使用します。
ブラウザに次のように表示される場合:
CONNECT www.google.com:443 HTTP/1.1
その意味は:
「こんにちはプロキシ、生のTCP googleへの接続を開いてください。私が書いた次のバイトは、何も解釈せずにその接続を繰り返します。もう1つ。直接Googleに送信しますが、自分で別のプロキシを使用する場合は、代わりに同じCONNECT
を伝えます。」
これがTLS(https)について何も言っていないことに注意してください。実際、CONNECT
はTLSと直交しています。 1つだけ持つことができます、他のものを持つことができます、またはそれらの両方を持つことができます。
そうは言っても、CONNECT
の目的はエンドツーエンドの暗号化されたTLSセッションを許可することであるため、プロキシ(またはプロキシチェーン全体)がデータを読み取ることはできません。 CONNECT
はプレーンHTTP内で発行でき、プロキシから生のバイトをコピーするだけでよいため、プロキシがTLSをまったく理解していなくても機能します。
ただし、最初のプロキシへの接続はTLS(https)にすることができますが、これはユーザーと最初のプロキシ間のトラフィックの二重暗号化を意味します。
明らかに、最終サーバーと直接通信する場合、CONNECT
には意味がありません。 TLSの話を始めてから、HTTP GET
を発行します。通常、エンドサーバーはCONNECT
を完全に無効にします。
プロキシに対して、CONNECT
サポートはセキュリティリスクを追加します。すべてのデータは、CONNECT
を介して渡すことができます。sshハッキングが192.168.1。*のサーバーに侵入したり、SMTPがスパムを送信したりすることもあります。外の世界は、これらの攻撃を通常のTCPプロキシによって開始された接続と見なします。理由を気にせず、HTTP CONNECT
が原因かどうかをチェックできません。悪用から身を守るためのプロキシまで。
はい、私はこれに4年後に答えていることを知っています、とにかくもっと明確にしたいです。
経験則として、GETはプレーンHTTPに、CONNECTはHTTPSに使用されます
ただし、詳細がありますので、関連するRFCを読んでください。
http://www.ietf.org/rfc/rfc2068.txthttp://www.ietf.org/rfc/rfc2817.txt