Traducerea unei cereri SOCKS5 într-un tunel HTTP
Finalizați schimbul CONNECT cu părintele, returnați clientului răspunsul SOCKS și abia apoi retransmiteți octeții aplicației.
Un frontend SOCKS5 poate folosi un proxy HTTP ca transport ulterior. Acționează ca server SOCKS față de client și ca client HTTP CONNECT față de părinte. Cele două schimburi de control se termină înainte de a începe fluxul aplicației.
Cererea SOCKS CONNECT furnizează deja gazda sau adresa destinației și portul. Pentru un schimb HTTP/1.1 ilustrativ cu părintele:
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
Traduceți rezultatul la graniță
Adaptorul efectuează orice autentificare cerută de părinte și așteaptă rezultatul CONNECT. Un răspuns 2xx reușit stabilește tunelul către părinte. Abia după aceea trebuie să trimită înapoi clientului din aval răspunsul SOCKS de succes corespunzător.
Dacă părintele respinge operația, trimiteți un răspuns SOCKS de eșec definit, apoi închideți imediat conexiunea clientului. SOCKS5 impune acea închidere în zece secunde de la detectarea eșecului. Păstrați starea HTTP a părintelui ca informație de diagnostic pentru adaptor. Transmiterea acelei linii de stare ca date ale aplicației ar introduce un mesaj de control HTTP într-un flux al cărui client așteaptă încadrarea SOCKS.
Înainte de un rezultat CONNECT reușit, părintele vorbește încă HTTP, inclusiv încadrarea oricărui răspuns de provocare sau de eroare. După delimitatorul de antete al unui rezultat reușit, conexiunea devine tunelul; nu există niciun corp de răspuns HTTP de consumat mai întâi.
Păstrați octeții de după antete
O singură citire poate conține împreună sfârșitul antetelor părintelui și octeți de la destinație. Păstrați acei octeți suplimentari pentru aplicația din aval. Protocoalele în care serverul vorbește primul pot saluta imediat după deschiderea conexiunii.
După ce răspunsul SOCKS de succes a fost trimis, retransmiteți fluxul aplicației în ambele direcții. Adaptorul nu trebuie să alterneze un mesaj al clientului cu un mesaj al serverului și nu trebuie să înțeleagă înregistrările TLS pentru a le retransmite. Treaba lui de protocol a fost să stabilească și să traducă cele două negocieri de tunel.