Jedan SOCKS5 frontend može koristiti HTTP proksi kao svoj dalji transport. Deluje kao SOCKS server prema klijentu i kao HTTP CONNECT klijent prema roditelju. Dve kontrolne razmene završavaju pre nego što počne tok aplikacije.

SOCKS CONNECT zahtev već daje odredišni host ili adresu i port. Za ilustrativnu HTTP/1.1 razmenu sa roditeljem:

client → adapter: SOCKS5 CONNECT service.example.net:443
adapter → parent:
    CONNECT service.example.net:443 HTTP/1.1
    Host: service.example.net:443

parent → adapter: HTTP/1.1 200 Connection Established
                 [end of headers]
adapter → client: SOCKS5 success reply

client ↔ adapter ↔ parent ↔ service: application bytes

Prevedite rezultat na granici

Adapter obavlja svaku potrebnu autentifikaciju kod roditelja i čeka rezultat CONNECT-a. Uspešan 2xx odgovor uspostavlja roditeljski tunel. Tek tada treba da vrati odgovarajući SOCKS odgovor o uspehu klijentu nizvodno.

Ako roditelj odbije operaciju, pošaljite definisani SOCKS odgovor o neuspehu, a zatim odmah prekinite vezu sa klijentom. SOCKS5 zahteva to zatvaranje u roku od deset sekundi od otkrivanja neuspeha. Sačuvajte HTTP status roditelja kao dijagnostičku informaciju za adapter. Prosleđivanje tog statusnog reda kao podataka aplikacije stavilo bi HTTP kontrolnu poruku u tok čiji klijent očekuje SOCKS uokvirenje.

Pre uspešnog rezultata CONNECT-a roditelj još govori HTTP, uključujući uokvirenje bilo kog odgovora sa izazovom ili greškom. Posle razdelnika zaglavlja uspešnog rezultata veza postaje tunel; nema HTTP tela odgovora koje bi se prvo trošilo.

Sačuvajte bajtove nakon zaglavlja

Jedno čitanje može sadržati kraj roditeljskih zaglavlja i bajtove sa odredišta zajedno. Sačuvajte te dodatne bajtove za nizvodnu aplikaciju. Protokoli u kojima server govori prvi mogu se javiti odmah nakon otvaranja veze.

Nakon što je SOCKS odgovor o uspehu poslat, prosleđujte tok aplikacije u oba smera. Adapter ne mora da izmenjuje jednu klijentsku poruku sa jednom serverskom porukom i ne mora da razume TLS zapise da bi ih prosledio. Njegov protokolarni posao bio je uspostavljanje i prevođenje dve tunelske pregovore.

Povezani članci