SOCKS5-kliendiliides võib kasutada HTTP-proksit oma edasise transpordina. See toimib kliendi suunas SOCKS-serverina ja vanema suunas HTTP CONNECT-kliendina. Mõlemad juhtimisvahetused lõpevad enne, kui rakenduse voog algab.

SOCKS CONNECT-päring annab juba sihtkoha hosti või aadressi ja pordi. Illustratiivse HTTP/1.1-vahetuse jaoks vanemaga:

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

Tõlkige tulemus piiril

Adapter teeb vanema juures vajaliku autentimise ja ootab CONNECT-tulemust. Edukas 2xx-vastus püstitab vanema tunneli. Alles seejärel peaks see tagastama vastava SOCKS-eduteate allavoolu kliendile.

Kui vanem keeldub toimingust, saatke määratletud SOCKS-tõrkevastus ja seejärel lõpetage kliendi ühendus viivitamata. SOCKS5 nõuab seda sulgemist kümne sekundi jooksul tõrke tuvastamisest. Hoidke vanema HTTP-olekut adapteri jaoks diagnostilise teabena. Selle olekurea edastamine rakenduse andmetena paneks HTTP juhtimisteate voogu, mille klient ootab SOCKS-raamistust.

Enne edukat CONNECT-tulemust räägib vanem veel HTTP-d, sealhulgas mis tahes väljakutse- või veavastuse raamistus. Eduka tulemuse päiseeraldaja järel muutub ühendus tunneliks; esmalt pole mingit HTTP-vastuse keha tarbida.

Hoidke baidid pärast päiseid

Üks lugemine võib sisaldada korraga nii vanema päiste lõppu kui ka sihtkohast tulevaid baite. Hoidke need lisabaidid allavoolu rakenduse jaoks. Server-kõigepealt protokollid võivad teretada kohe pärast ühenduse avamist.

Pärast SOCKS-eduteate saatmist edastage rakenduse voogu mõlemas suunas. Adapter ei pea vaheldama ühte kliendisõnumit ühe serverisõnumiga ega mõistma TLS-kirjeid, et neid edasi saata. Tema protokollitöö oli kahe tunneli läbirääkimise loomine ja tõlkimine.

Seotud artiklid