Что означает параметр curl CURLOPT_HTTPPROXYTUNNEL?

В документации cURL есть параметр под названием CURLOPT_HTTPPROXYTUNNEL, который определен для создания туннелировать через прокси, если он включен.

Однако я понятия не имею, что такое туннель и что он делает. Какая разница, если я не буду использовать такой туннель?

curl_setopt($session, CURLOPT_HTTPPROXYTUNNEL, 1) 

ОБНОВЛЕНИЕ:

Что я понял, так это то, что туннель относится к HTTP CONNECT METHOD, и вот что, как я понимаю, он делает:

Метод туннелирования на основе HTTP использует метод/команду HTTP CONNECT. Клиент выдает команду HTTP CONNECT прокси-серверу HTTP. Затем прокси устанавливает TCP-соединение с определенным сервером:порт и передает данные между этим сервером:портом и клиентским соединением. Поскольку это создает брешь в безопасности, прокси-серверы HTTP с поддержкой CONNECT обычно ограничивают доступ к методу CONNECT. Прокси разрешает доступ только к белому списку определенных авторизованных серверов.

Итак, вопрос, в чем разница между подключением к прокси с методом CONNECT и без него?


person Atef    schedule 05.09.2012    source источник
comment
хорошо, что я получил сейчас, так это то, что он вызывает HTTP CONNECT METHOD, и вот что делает HTTP CONNECT: другой метод туннелирования на основе HTTP использует метод/команду HTTP CONNECT. Клиент выдает команду HTTP CONNECT прокси-серверу HTTP. Затем прокси устанавливает TCP-соединение с определенным сервером:порт и передает данные между этим сервером:портом и клиентским соединением. Поскольку это создает брешь в безопасности, прокси-серверы HTTP с поддержкой CONNECT обычно ограничивают доступ к методу CONNECT. Прокси разрешает доступ только к белому списку определенных авторизованных серверов. так что вопрос какая разница без него   -  person Atef    schedule 06.09.2012
comment
Я должен упомянуть, что при использовании прокси-сервера, такого как Squid3, в файле конфигурации вы можете ограничить метод подключения к SSL (зашифрованным) портам. Это готовая конфигурация по умолчанию, которую используют многие серверы. Однако, если вы измените конфигурацию Squid, чтобы разрешить CONNECT для незашифрованных портов (например, 80), вы также можете использовать CONNECT для URL-адресов http://.   -  person David Refoua    schedule 17.05.2018


Ответы (1)


Без 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

С CURLOPT_HTTPPROXYTUNNEL: вы просите прокси открыть прямое двоичное соединение (например, HTTPS, называемое TCP Tunnel) непосредственно к месту назначения, выполнив HTTP-запрос CONNECT. Когда туннель в порядке, прокси ответит вам HTTP/1.1 200 Connection established. Когда он получен, ваш браузер начинает напрямую запрашивать место назначения: прокси-сервер не анализирует заголовки HTTP и теоретически не читает данные туннеля, он просто пересылает их, поэтому он называется туннелем!

Пример шагов:

  1. HTTP CONNECT отправлено 1.1.1.1
  2. 1.1.1.1 получите HTTP CONNECT и получите IP/порт вашего конечного пункта назначения (поле header из HTTP CONNECT).
  3. 1.1.1.1 откройте TCP Socket, выполнив TCP handshake пункт назначения 2.22.63.73:80 (ip/port of www.site.com).
  4. 1.1.1.1 Создайте туннель, подключив ваш TCP Socket к TCP Socket, открытому для 2.22.63.73:80, а затем напишите вам в ответ HTTP/1.1 200 Connection established ведь это означает, что ваш клиент теперь может заставить ваш запрос выдать TCP Tunnel (полученные данные TCP будут переданы непосредственно на сервер и наоборот).
person Ifnot    schedule 28.02.2013
comment
Во избежание путаницы обратите внимание, что прокси МОГУТ нормально читать туннелированные данные, если только туннель не зашифрован (как в случае с запросами https://). Ничто не мешает прокси проверять все, что вы отправляете и получаете. Только сквозное шифрование обеспечивает безопасность ваших данных. - person rdlowrey; 24.07.2014