Frontend SOCKS5 môže používať HTTP proxy ako svoju ďalšiu prenosovú cestu. Vystupuje ako server SOCKS voči klientovi a ako klient HTTP CONNECT voči rodičovi. Obe riadiace výmeny sa skončia predtým, než sa začne tok aplikácie.

Požiadavka SOCKS CONNECT už obsahuje cieľového hostiteľa alebo adresu a port. Pre ilustratívnu výmenu HTTP/1.1 s rodičom:

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

Preložte výsledok na hranici

Adaptér vykoná všetku požadovanú autentifikáciu u rodiča a čaká na výsledok CONNECT. Úspešná odpoveď 2xx vytvorí tunel k rodičovi. Až potom by mal klientovi nižšie v toku vrátiť zodpovedajúcu odpoveď SOCKS o úspechu.

Ak rodič operáciu odmietne, odošlite definovanú odpoveď SOCKS o zlyhaní a potom okamžite ukončite spojenie s klientom. SOCKS5 vyžaduje toto zatvorenie do desiatich sekúnd od zistenia zlyhania. Uchovávajte stavový kód HTTP rodiča ako diagnostickú informáciu pre adaptér. Preposielanie tohto stavového riadku ako dát aplikácie by vložilo riadiacu správu HTTP do toku, ktorého klient očakáva rámcovanie SOCKS.

Pred úspešným výsledkom CONNECT rodič stále hovorí HTTP, vrátane rámcovania akejkoľvek odpovede s výzvou alebo chybou. Po oddeľovači hlavičiek úspešného výsledku sa spojenie stane tunelom; najprv nie je žiadne telo odpovede HTTP na spotrebovanie.

Zachovajte bajty za hlavičkami

Jedno čítanie môže obsahovať koniec hlavičiek rodiča aj bajty z cieľa spoločne. Tieto bajty navyše si ponechajte pre aplikáciu nižšie v toku. Protokoly, v ktorých hovorí server prvý, môžu pozdraviť hneď po otvorení spojenia.

Po odoslaní odpovede SOCKS o úspechu prenášajte tok aplikácie oboma smermi. Adaptér nemusí striedať jednu správu klienta s jednou správou servera a nemusí rozumieť záznamom TLS, aby ich preposlal. Jeho protokolovou prácou bolo nadviazať a preložiť obe tunelové rokovania.

Súvisiace články