SOCKS5-pyynnön kääntäminen HTTP-tunneliksi
Suorita CONNECT-vaihto ylätason kanssa loppuun, palauta SOCKS-vastaus asiakkaalle ja välitä sovelluksen tavut vasta sen jälkeen.
SOCKS5-edusta voi käyttää HTTP-välityspalvelinta eteenpäin kulkevana siirtotienään. Se toimii SOCKS-palvelimena asiakasta kohti ja HTTP CONNECT -asiakkaana ylätasoa kohti. Molemmat ohjausvaihdot päättyvät ennen kuin sovellusvirta alkaa.
SOCKS CONNECT -pyyntö antaa jo kohdeisännän tai -osoitteen ja portin. Havainnollistava HTTP/1.1-vaihto ylätason kanssa:
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
Käännä tulos rajalla
Sovitin suorittaa ylätason vaatiman todennuksen ja odottaa CONNECT-tulosta. Onnistunut 2xx-vastaus muodostaa ylätason tunnelin. Vasta sen jälkeen sen tulee palauttaa vastaava SOCKS-onnistumisvastaus alavirran asiakkaalle.
Jos ylätaso hylkää toiminnon, lähetä määritelty SOCKS-virhevaste ja katkaise sitten asiakkaan yhteys viipymättä. SOCKS5 edellyttää tätä sulkemista kymmenen sekunnin kuluessa virheen havaitsemisesta. Säilytä ylätason HTTP-tila sovittimen diagnostiikkatietona. Tuon tilan rivin välittäminen sovellustietona veisi HTTP-ohjausviestin virtaan, jonka asiakas odottaa SOCKS-kehystystä.
Ennen onnistunutta CONNECT-tulosta ylätaso puhuu yhä HTTP:tä, mukaan lukien mahdollisen haaste- tai virhevasteen kehystys. Onnistuneen tuloksen otsikkorajoittimen jälkeen yhteydestä tulee tunneli; ensin ei ole kulutettavaa HTTP-vastauksen runkoa.
Säilytä tavut otsikoiden jälkeen
Yksi luku voi sisältää ylätason otsikoiden lopun ja kohteesta tulevat tavut yhdessä. Säilytä nuo ylimääräiset tavut alavirran sovellukselle. Palvelin ensin -protokollat voivat tervehtiä heti yhteytensä avauduttua.
Kun SOCKS-onnistumisvastaus on lähetetty, välitä sovellusvirtaa molempiin suuntiin. Sovittimen ei tarvitse vuorotella yhtä asiakasviestiä yhden palvelinviestin kanssa, eikä sen tarvitse ymmärtää TLS-tietueita välittääkseen niitä. Sen protokollatyö oli kahden tunnelinneuvottelun pystyttäminen ja kääntäminen.