Protokoły · 1 min czytania

Wyjaśnienie metody HTTP CONNECT

CONNECT to metoda HTTP, która umożliwia działanie HTTPS przez proxy. Zamiast pobierać stronę, prosi proxy o otwarcie surowego tunelu do docelowego miejsca, aby zaszyfrowany ruch mógł przechodzić nienaruszony. Ten przewodnik wyjaśnia, jak działa CONNECT, krok po kroku.

Dlaczego istnieje CONNECT

Zwykły proxy HTTP działa, odczytując Twoje żądanie, pobierając zasób i zwracając go — widzi i przekazuje pełne żądanie i odpowiedź. To działa w przypadku zwykłego HTTP, ale nie sprawdza się w przypadku HTTPS: cały sens TLS polega na tym, że żaden pośrednik nie może odczytać ruchu, więc proxy nie może po prostu "pobierać strony" w Twoim imieniu bez łamania szyfrowania.

Metoda CONNECT rozwiązuje ten problem. Zamiast prosić proxy o pobranie czegoś, Twój klient prosi proxy o otwarcie surowego tunelu TCP do hosta i portu, a następnie ustępuje miejsca. Gdy tunel jest otwarty, Twój klient wykonuje handshake TLS bezpośrednio z docelowym przez proxy, a proxy bezwiednie przekazuje zaszyfrowane bajty w obu kierunkach. Proxy nigdy nie widzi tekstu jawnego — widzi tylko nieprzezroczysty strumień i, za pośrednictwem linii CONNECT oraz TLS SNI, nazwę hosta docelowego. Tak działa s4m proxy HTTP na porcie 3128 dla HTTPS.

Jak tunel jest ustanawiany

Przepływ jest krótki i konkretny:

  1. Twój klient wysyła CONNECT example.com:443 HTTP/1.1 do proxy, z nagłówkiem Host i, jeśli to konieczne, z poświadczeniami Proxy-Authorization.
  2. Proxy otwiera połączenie TCP do example.com:443.
  3. Jeśli to się powiedzie, proxy odpowiada HTTP/1.1 200 Połączenie nawiązane. Od tego momentu połączenie jest czystym tunelem — bez dalszej semantyki HTTP.
  4. Twój klient teraz przeprowadza handshake TLS bezpośrednio z example.com przez ten tunel, a wszystkie następne dane aplikacji są szyfrowane end-to-end.

Z tego wynikają dwie konsekwencje. Po pierwsze, TLS pozostaje prawdziwie end-to-end: proxy nic nie uwierzytelnia i nic nie odczytuje wewnątrz tunelu, więc walidacja certyfikatu odbywa się między twoim klientem a prawdziwym serwerem. Po drugie, ponieważ CONNECT po prostu otwiera tunel TCP, proxy mogą w zasadzie tunelować inne protokoły oparte na TLS lub dowolne inne protokoły na innych portach — co jest dokładnie powodem, dla którego proxy zazwyczaj ograniczają CONNECT do portu 443 (i kilku innych), aby uniknąć stania się otwartym przekaźnikiem.

Zobacz CONNECT z curl

curl automatycznie wysyła CONNECT dla adresu https:// przez proxy HTTP. Użyj -v, aby obserwować żądanie CONNECT i odpowiedź '200 Połączenie nawiązane'.

bash
# Verbose: watch the CONNECT handshake to the proxy, then TLS to the site
curl -v -x http://USER:PASS@proxy.s4m.online:3128 https://example.com 2>&1 \
  | grep -Ei 'CONNECT|Connection established|SSL connection|Proxy-Auth'

# You'll see, in order:
#   > CONNECT example.com:443 HTTP/1.1        (client asks for a tunnel)
#   < HTTP/1.1 200 Connection established     (proxy opened the tunnel)
#   * SSL connection using TLSv1.3 ...        (TLS is end-to-end, past proxy)

# Contrast: plain HTTP needs no tunnel; the proxy relays the request itself:
curl -v -x http://USER:PASS@proxy.s4m.online:3128 http://example.com 2>&1 \
  | grep -Ei 'GET http|absolute'
Share this page
FAQ

Pytania, odpowiedzi

Co robi metoda HTTP CONNECT?

Prosi proxy o otwarcie surowego tunelu TCP do docelowego hosta i portu, zamiast pobierać zasób. Gdy proxy odpowiada 200 Connection Established, klient tuneluje własny handshake TLS i zaszyfrowane dane bezpośrednio do celu, a proxy po prostu przekazuje nieprzezroczyste bajty. Tak działa HTTPS przez proxy HTTP.

Czy proxy może odczytać mój ruch HTTPS podczas tunelu CONNECT?

Nie. Po otwarciu tunelu, TLS jest negocjowany end-to-end między Twoim klientem a serwerem docelowym, więc proxy widzi tylko zaszyfrowane bajty. Może zobaczyć nazwę hosta i port docelowy z linii CONNECT oraz TLS SNI, ale nie zawartość — chyba że przeprowadza przechwytywanie TLS z certyfikatem, któremu ufa Twoje urządzenie.

Dlaczego serwery proxy ograniczają CONNECT do portu 443?

Ponieważ CONNECT otwiera dowolny tunel TCP, nieograniczony proxy mógłby przekazywać dowolny protokół do dowolnego portu i stać się otwartym przekaźnikiem do nadużyć. Ograniczenie CONNECT do 443 (a czasami krótka lista dozwolonych) ogranicza go do normalnego HTTPS, jednocześnie zapobiegając używaniu proxy do tunelowania niezwiązanych usług.

Proxy HTTP, które tuneluje HTTPS

Uwierzytelnione proxy HTTP s4m na porcie 3128 obsługuje CONNECT, więc HTTPS pozostaje szyfrowane end-to-end, obok SOCKS5 na 1080. Metering pay-as-you-go, konta anonimowe, akceptacja kryptowalut.

Ludzie znaleźli tę stronę, szukając

Rzeczywiste frazy wyszukiwania, na które ta strona odpowiada — powiązane otwierają stronę, która je szczegółowo omawia.