NP NEONPROXYPROXY NETWORK
КупитьЦеныFAQПартнёркаБлог Прокси-чекерМой IPAPI TG-бот

HTTP CONNECT туннель: как работает

HTTP-прокси изначально задумывался для кэширования GET-запросов к http:// сайтам. Современный веб живёт на HTTPS, и ключевой механизм — метод CONNECT из RFC 7231. Он превращает прокси в blind TCP relay: после успешного handshake клиент и сервер обмениваются байтами, а прокси не парсит HTTP внутри туннеля. Без CONNECT браузер не открыл бы https:// сайты через классический HTTP proxy.

Синтаксис запроса CONNECT

Клиент отправляет текстовый запрос:

CONNECT www.example.com:443 HTTP/1.1
Host: www.example.com:443
Proxy-Authorization: Basic …

Прокси резолвит имя (или использует переданный IP), открывает TCP к www.example.com:443. При успехе — HTTP/1.1 200 Connection Established с пустым телом. Дальше канал становится двусторонним pipe: TLS, WebSocket или любой бинарный протокол.

SVYAZVPN — свобода без границ

Отличие от обычного GET через прокси

Для http:// (без S) прокси может работать как forward proxy: сам делает GET к origin и возвращает ответ клиенту — absolute URI в строке запроса. Для HTTPS forward mode неприменим без расшифровки. CONNECT создаёт tunnel; SSL — в отдельном разборе HTTPS CONNECT.

Нестандартные порты (8443, 4443) поддерживаются тем же CONNECT — укажите host:port. SOCKS5 делает аналог через другой handshake — см. сравнение протоколов.

Коды ответов прокси

200 — туннель открыт. 407 — нужна аутентификация; повторите CONNECT с credentials — гайд по auth. 403/502 — прокси или upstream запретил целевой host (policy, geo block). 504 — timeout к origin.

Клиент должен закрывать tunnel явно при отмене запроса — иначе на прокси висят idle connections.

Примеры настройки

curl: curl -x http://user:pass@host:port https://example.com — curl сам отправит CONNECT для HTTPS URL.

Python requests: proxies={"https": "http://user:pass@host:port"} — библиотека использует CONNECT для https:// targets. Подробнее — requests.

Браузер: укажите HTTP proxy host:port в настройках; CONNECT для каждого HTTPS tab выполняется автоматически.

Отладка CONNECT в Wireshark

На клиенте в cleartext виден только handshake до 200 Established — дальше encrypted. Фильтр http.request.method == "CONNECT" показывает целевые host:port. Если видите CONNECT к неожиданным доменам — malware или misconfigured app. Legitimate browser шлёт CONNECT на каждый HTTPS origin отдельно (до HTTP/2 connection coalescing в новых версиях).

Keep-Alive на control connection экономит TCP handshake к прокси при серии запросов — curl --proxy-anyauth переиспользует socket. Timeout idle tunnel обычно 60–300 секунд; long-polling и WebSocket держат tunnel открытым часами.

Ограничения и безопасность

Некоторые прокси блокируют CONNECT на порт 25 (anti-spam) или 22. Политика NEONPROXY ориентирована на web-трафик 443/80. CONNECT не скрывает факт использования прокси от destination — origin видит IP прокси как клиента. Для проверки исходящего адреса — Мой IP через настроенный прокси.

Corporate transparent proxy иногда перехватывает CONNECT без явной настройки — отличайте explicit proxy (ваш выбор) от ISP-level interception. При chained proxy порядок auth: сначала outer, потом inner — иначе 407 на неправильном уровне.

HTTP/2 к прокси

Некоторые прокси поддерживают HTTP/2 для control connection — multiplex нескольких CONNECT на одном TCP к proxy server. Экономит latency при burst HTTPS requests из browser.

Persistent CONNECT + subsequent requests: после tunnel close browser may reuse proxy connection for new CONNECT. Proxy-Connection: keep-alive header legacy but still seen in wild.

HTTP/2 к прокси

Некоторые прокси поддерживают HTTP/2 для control connection — multiplex нескольких CONNECT на одном TCP к proxy server. Экономит latency при burst HTTPS requests из browser.

Persistent CONNECT + subsequent requests: после tunnel close browser may reuse proxy connection for new CONNECT. Proxy-Connection: keep-alive header legacy but still seen in wild.

Proxy auto-config PAC

PAC file returns PROXY host:port for *.example.com DIRECT otherwise. Browser evaluates PAC before CONNECT; misconfigured PAC sends internal URLs through external proxy — leak risk. WPAD in corporate AD — test PAC rules when QA from home office.

Краткий чеклист

HTTPS URL в curl -x вызывает CONNECT. 407 — добавьте Proxy-Authorization. После 200 Established идёт TLS handshake. SOCKS5 для приложений без HTTP proxy. Один CONNECT на origin — типичный паттерн. Keep-alive снижает TCP overhead к прокси.

Wireshark filter http.request.method==CONNECT помогает отладить поведение клиента.