web-dev-qa-db-ja.com

「CONNECT」と「GETHTTPS」の違いは何ですか?

実際の質問に入る前に、私のプロジェクトがどのように機能するかを説明しましょう。簡単にするために、プロキシはラップトップ上にあり、クライアント(ブラウザー)もあります。リモートサーバーは、たとえばYouTubeになります。

SwitchOmegaプラグインのおかげで、クライアントはプロキシの特定のポートに接続されています。クライアントはwww.youtube.comに接続することを望んでおり、プロキシは次のリクエストを取得します。

CONNECT www.youtube.com:443 HTTP/1.1
Host: www.youtube.com:443
Proxy-Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36

プロキシがCONNECTリクエストを受け取ると、IP:PortへのTCP接続を開き、200 OKメッセージをクライアントに返し、データを送信する必要があると言われました。接続の片側が閉じるまで。

HTTPリクエストを追跡する別のプラグインであるHTTPトレースを使用すると、ブラウザーに別のリクエストが表示されます。

GET https://www.youtube.com/
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
and other data...

では、なぜHTTPトレースがCONNECT www.youtube.com:443 HTTP/1.1を表示しているのに、プロキシがGET https://www.youtube.com/を受信するのでしょうか。それらは同じことを意味しますか?

4
elmazzun

[〜#〜] connect [〜#〜]はリクエストを処理します

[〜#〜]接続[〜#〜]

CONNECTメソッドは、要求の接続を透過的なTCP/IPトンネルに変換し、通常、暗号化されていないHTTPプロキシを介したSSL暗号化通信(HTTPS)を容易にします。

一方[〜#〜] get [〜#〜]はデータを取得します。

[〜#〜] get [〜#〜]

GETメソッドは、指定されたリソースの表現を要求します。 GETを使用したリクエストは、データを取得するだけで、他の効果はありません。 (これは他のいくつかのHTTPメソッドにも当てはまります。)W3Cは、この区別に関するガイダンス原則を公開しており、「Webアプリケーションの設計は、上記の原則だけでなく、関連する制限によっても通知される必要があります」と述べています。

ソース-ハイパーテキスト転送プロトコル

4
Ramhound

あなたは美容上の問題を扱っていると思います。

GET https://www.youtube.com/は、フェッチがGETで行われたことを示すためにログに記録されたものであり、ターゲットはhttps://www.youtube.comです。

プロキシがGET https:// URIをサポートする標準化された方法はありません。数年前にIETF HTTP WGで指摘されましたが、さまざまな理由で破棄されました(主に、プロキシに関する問題を思い出してください)

プロキシに送信されるリクエストである可能性はほとんどありません。他の人が言っているように、CONNECTwww.youtube.com:443に接続するために使用され、スキーム(プロトコル)または権限(サーバー:ポートなど)の部分を含まない他のGETリクエストがありますURI。

あなたの例では次のようになります:

GET / HTTP/1.1
Host: www.youtube.com:443
0
Adrien