Метод HTTP CONNECT

CONNECT — команда HTTP, которой программа просит прокси открыть прямой туннель к сайту.

Обновлено · Редакция Prokso

Для сайтов с HTTPS HTTP-прокси не читает запросы, а только соединяет программу с сайтом. Программа отправляет «CONNECT example.com:443», прокси отвечает «200» и дальше просто передаёт зашифрованные данные в обе стороны.

Именно поэтому через HTTP-прокси безопасно открывать сайты с TLS: содержимое страниц прокси не видит.

Если туннель не открылся, браузер показывает ошибку вроде ERR_TUNNEL_CONNECTION_FAILED. Причины и решения собраны на странице ошибка туннеля.

Туннель открывается только к разрешённым портам. В Prokso открыты, в частности, 80, 443, 8080 и 8443, а почтовые порты закрыты.

Обмен CONNECT строка за строкой

Программа отправляет прокси запрос из трех строк: CONNECT example.com:443 HTTP/1.1, Host: example.com:443 и Proxy-Authorization: Basic ... с данными входа. Прокси проверяет данные, соединяется с сайтом и отвечает строкой статуса с кодом 200. После пустой строки соединение становится туннелем, и начинается рукопожатие TLS с сайтом. Заголовок Host повторяет цель, потому что HTTP/1.1 требует его в каждом запросе.

Любой код, кроме 2xx, означает, что туннель не открылся, а ответ пришел от прокси, а не от сайта. В Prokso код 407 означает неверные данные входа или исчерпанный трафик, а 503 с пометкой NO_RAY — что для выбранного гео нет свободного адреса. Что делать с 407, описано на странице ошибка 407.

Как увидеть CONNECT в curl

Выполните curl -v -x http://LOGIN:PASSWORD@gw.prokso.com:823 https://example.com. Строки, начинающиеся с >, — это то, что отправил curl, а строки с < — ответы. Сначала вы увидите > CONNECT example.com:443 HTTP/1.1 и ответ прокси, затем строки TLS и только после них ответ сайта. Если после кода прокси строк TLS нет, туннель не открыт, и причину объясняет сам код. Больше примеров — в инструкции для curl.

Когда CONNECT не используется

Для адресов с http:// программа не открывает туннель. Она отправляет прокси полный адрес, например GET http://example.com/page HTTP/1.1, и прокси сам пересылает запрос. В этом случае адрес страницы и ее содержимое видны прокси, потому что шифрования нет.

В curl опция -p (--proxytunnel) заставляет открывать туннель и для адресов с http://.

Вопросы и ответы

Почему сайт открывается, а туннель нет?

Чаще всего программа идёт на закрытый порт или прокси отклонил вход. Проверьте строку в проверке прокси и порт сайта.

Нужен ли CONNECT для SOCKS5?

Нет. У SOCKS5 своя команда подключения, CONNECT — часть HTTP-прокси.

Резидентские $1.59, мобильные $2.50, серверные $0.65 за 1 ГБ

Регистрация за минуту, доступы сразу после оплаты.

Создать аккаунт