Oversæt en SOCKS5-anmodning til en HTTP-tunnel
Fuldfør CONNECT-udvekslingen med forælderen, send et SOCKS-svar til klienten, og send først derefter applikationsbytes.
En SOCKS5-frontend kan bruge en HTTP-proxy som sin videre transport. Den optræder som SOCKS-server over for klienten og som HTTP CONNECT-klient over for forælderen. De to kontroludvekslinger afsluttes, før applikationsstrømmen begynder.
SOCKS CONNECT-anmodningen leverer allerede destinationsværten eller adressen og porten. Til en illustrativ HTTP/1.1-udveksling med forælderen:
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
Oversæt resultatet ved grænsen
Adapteren fuldfører enhver påkrævet godkendelse hos forælderen og venter på CONNECT-resultatet. Et vellykket 2xx-svar etablerer forælderens tunnel. Først derefter bør den returnere det tilsvarende SOCKS-succesvar til den nedstrøms klient.
Hvis forælderen afviser operationen, send et defineret SOCKS-fejlsvar, og afbryd derefter klientforbindelsen omgående. SOCKS5 kræver den lukning inden for ti sekunder efter, at fejlen er registreret. Behold forælderens HTTP-status som diagnostisk information for adapteren. At videresende den statuslinje som applikationsdata ville anbringe en HTTP-kontrolmeddelelse i en strøm, hvis klient forventer SOCKS-indramning.
Før et vellykket CONNECT-resultat taler forælderen stadig HTTP, inklusive indramningen af ethvert udfordrings- eller fejlsvar. Efter headeraftgrænsningen i et vellykket resultat bliver forbindelsen tunnelen; der er ingen HTTP-svarskrop at forbruge først.
Bevar bytes efter headerne
En læsning kan indeholde slutningen på forælderens headere og bytes fra destinationen på én gang. Behold disse ekstra bytes til den nedstrøms applikation. Protokoller, hvor serveren taler først, kan hilse med det samme, efter at deres forbindelse åbnes.
Når SOCKS-succesvaret er sendt, videresend applikationsstrømmen i begge retninger. Adapteren behøver ikke skifte mellem én klientmeddelelse og én servermeddelelse, og den behøver ikke forstå TLS-poster for at videresende dem. Dens protokolarbejde var at etablere og oversætte de to tunnelforhandlinger.