12

CURLOPT_HTTPPROXYTUNNELcURLのドキュメントには、有効にしたときにプロキシ経由でトンネルを作成するように定義されたというオプションがあります。

しかし、私はトンネルが何であるか、そしてそれが何をするのか分かりません。このようなトンネルを使わないとどうなるのでしょうか?

curl_setopt($session, CURLOPT_HTTPPROXYTUNNEL, 1) 

アップデート:

私が得たのは、トンネルがを参照しているというHTTP CONNECT METHODことです。これが私が理解していることです。

HTTPベースのトンネリングメソッドは、HTTPCONNECTメソッド/コマンドを使用します。クライアントは、HTTPCONNECTコマンドをHTTPプロキシに発行します。次に、プロキシは特定のserver:portへのTCP接続を確立し、そのserver:portとクライアント接続の間でデータを中継します。これによりセキュリティホールが作成されるため、CONNECT対応のHTTPプロキシは通常、CONNECTメソッドへのアクセスを制限します。プロキシは、特定の許可されたサーバーのホワイトリストへのアクセスのみを許可します。

それで、問題は、CONNECTメソッドがある場合とない場合のプロキシへの接続の違いは何ですか?

4

1 に答える 1

22

それなしCURLOPT_HTTPPROXYTUNNEL

なしCURLOPT_HTTPPROXYTUNNEL:HTTPリクエストの宛先としてプロキシアドレス/ポートを使用するだけです。プロキシはクエリのHTTPヘッダーを読み取り、リクエストを宛先に(HTTPヘッダーを使用して)転送してから、応答を書き込みます。

手順の例:

  1. HTTP GET /index.htmlに送信された1.1.1.1 (proxy)
  2. 1.1.1.1リクエストを受信し、HTTPリクエストの最終的な宛先を取得するためのヘッダーを解析します。
  3. 1.1.1.1クエリとヘッダーをに転送しますwww.site.com (destination in request headers)
  4. 1.1.1.1から受け取った応答をあなたに書き戻しますwww.site.com

CURLOPT_HTTPPROXYTUNNEL

With : HTTPリクエストを実行して、宛先へCURLOPT_HTTPPROXYTUNNELの直接バイナリ接続(HTTPSなどのHTTPSと呼ばれる)を直接開くようにプロキシに要求します。トンネルに問題がない場合、プロキシはあなたに返信します。ブラウザを受信すると、宛先への直接クエリを開始します。プロキシはHTTPヘッダーを解析せず、理論的にはトンネルデータを読み取らず、転送するだけなので、トンネルと呼ばれます。TCP TunnelCONNECTHTTP/1.1 200 Connection established

手順の例:

  1. HTTP CONNECTに送信された1.1.1.1
  2. 1.1.1.1HTTP CONNECT最終的な宛先のIP/ポートを受信して​​取得します(headerのフィールドHTTP CONNECT)。
  3. 1.1.1.1TCP Socket目的地までを実行してを開きTCP handshakeます2.22.63.73:80 (ip/port of www.site.com)
  4. 1.1.1.1開いた場所にパイプで接続してトンネルを作成しTCP Socket、それを書き戻すと、クライアントがクエリをスローできるようになります(受信したTCPデータはサーバーに直接送信されます。その逆も同様です)。TCP Socket2.22.63.73:80HTTP/1.1 200 Connection establishedTCP Tunnel
于 2013-02-28T17:21:49.380 に答える