Frontend SOCKS5 může používat HTTP proxy jako svou další přenosovou cestu. Vystupuje jako server SOCKS vůči klientovi a jako klient HTTP CONNECT vůči rodiči. Obě řídicí výměny skončí dříve, než začne tok aplikace.

Požadavek SOCKS CONNECT už obsahuje cílového hostitele nebo adresu a port. Pro ilustrativní výměnu HTTP/1.1 s rodičem:

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

Přeložte výsledek na hranici

Adaptér provede veškerou požadovanou autentizaci u rodiče a čeká na výsledek CONNECT. Úspěšná odpověď 2xx vytvoří tunel k rodiči. Teprve potom má klientovi níže po proudu vrátit odpovídající odpověď SOCKS o úspěchu.

Pokud rodič operaci odmítne, odešlete definovanou odpověď SOCKS o selhání a poté okamžitě ukončete spojení s klientem. SOCKS5 vyžaduje toto uzavření do deseti sekund od zjištění selhání. Uchovávejte stavový kód HTTP rodiče jako diagnostickou informaci pro adaptér. Předávání tohoto stavového řádku jako dat aplikace by vložilo řídicí zprávu HTTP do toku, jehož klient očekává rámování SOCKS.

Před úspěšným výsledkem CONNECT rodič stále mluví HTTP, včetně rámování jakékoli odpovědi s výzvou nebo chybou. Po oddělovači hlaviček úspěšného výsledku se spojení stane tunelem; nejprve není žádné tělo odpovědi HTTP ke spotřebování.

Zachovejte bajty za hlavičkami

Jedno čtení může obsahovat konec hlaviček rodiče i bajty z cíle společně. Tyto bajty navíc si ponechte pro aplikaci níže po proudu. Protokoly, v nichž mluví server první, mohou pozdravit hned po otevření spojení.

Poté, co byla odeslána odpověď SOCKS o úspěchu, přenášejte tok aplikace oběma směry. Adaptér nemusí střídat jednu zprávu klienta s jednou zprávou serveru a nemusí rozumět záznamům TLS, aby je předal. Jeho protokolovou prací bylo navázat a přeložit dvě tunelová vyjednávání.

Související články