Een SOCKS5-verzoek omzetten in een HTTP-tunnel
Rond de CONNECT-uitwisseling met de bovenliggende partij af, stuur een SOCKS-antwoord terug naar de client en pas daarna de bytes van de toepassing.
Een SOCKS5-frontend kan een HTTP-proxy als zijn verdere transport gebruiken. Hij gedraagt zich als SOCKS-server tegenover de client en als HTTP CONNECT-client tegenover de bovenliggende partij. Beide controle-uitwisselingen eindigen voordat de toepassingsstroom begint.
Het SOCKS CONNECT-verzoek levert al de bestemmingshost of het adres en de poort. Voor een illustratieve HTTP/1.1-uitwisseling met de bovenliggende partij:
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
Vertaal het resultaat aan de grens
De adapter rondt elke vereiste authenticatie bij de bovenliggende partij af en wacht op het CONNECT-resultaat. Een geslaagd 2xx-antwoord brengt de tunnel naar de bovenliggende partij tot stand. Pas daarna mag hij het bijbehorende SOCKS-succesantwoord aan de stroomafwaartse client terugsturen.
Als de bovenliggende partij de bewerking weigert, stuur dan een gedefinieerd SOCKS-foutantwoord en beëindig daarna de clientverbinding onmiddellijk. SOCKS5 eist die sluiting binnen tien seconden na het vaststellen van de fout. Bewaar de HTTP-status van de bovenliggende partij als diagnostische informatie voor de adapter. Het doorgeven van die statusregel als toepassingsgegevens zou een HTTP-controlebericht in een stroom zetten waarvan de client SOCKS-framing verwacht.
Vóór een geslaagd CONNECT-resultaat spreekt de bovenliggende partij nog HTTP, inclusief de framing van elk uitdagings- of foutantwoord. Na het scheidingsteken van de headers van een geslaagd resultaat wordt de verbinding de tunnel; er is eerst geen HTTP-antwoordlichaam te verbruiken.
Bewaar de bytes na de headers
Eén leesbewerking kan het einde van de headers van de bovenliggende partij en bytes van de bestemming samen bevatten. Bewaar die extra bytes voor de stroomafwaartse toepassing. Protocollen waarbij de server eerst spreekt, kunnen direct na het openen van hun verbinding groeten.
Nadat het SOCKS-succesantwoord is verzonden, geef de toepassingsstroom in beide richtingen door. De adapter hoeft niet één clientbericht met één serverbericht af te wisselen, en hij hoeft TLS-records niet te begrijpen om ze door te geven. Zijn protocolwerk was het opzetten en vertalen van de twee tunnelonderhandelingen.