Server Node HTTP obsluhuje bežnú požiadavku proxy prostredníctvom svojho callbacku požiadavky. CONNECT ide inou cestou: server vyšle connect s požiadavkou, klientskym socketom a bufferom head.

Táto udalosť je odovzdaním medzi parsovaním HTTP a tunelom. Neexistuje bežný objekt ServerResponse, ktorý by bolo možné naďalej používať pre tunelovanú prevádzku.

ArgumentČo nesie
reqPožiadavka CONNECT vrátane cieľovej autority a hlavičiek
clientSocketSpojenie späť ku klientovi
headTunelové dáta, ktoré Node už prečítal za hlavičkami HTTP, prípadne prázdne

Dokončite rozhodnutie HTTP skôr, než odošlete bajty

Overte požadovaného hostiteľa a port, uplatnite zásady prístupu a overovania proxy a nadviažte upstream spojenie. CONNECT identifikuje autoritu ako service.example:443; parsujte túto formu s ohľadom na autority IPv6 namiesto slepého delenia na každej dvojbodke.

Keď je tunel prijatý, odošlite úspešnú odpoveď HTTP nasledovanú jej ukončujúcim prázdnym riadkom. Potom prepošlite všetky bajty head upstream, než budete pokračovať s ďalšími bajtmi z klientského socketu. Pripojením nového poslucháča dát nemožno obnoviť buffer, ktorý už bol obsluhe odovzdaný samostatne.

Oficiálny príklad tunelovania v Node vykonáva toto odovzdanie pomocou serverSocket.write(head) pred spojením oboch smerov toku. Jeho malý príklad ilustruje prechod; nasadená proxy tiež potrebuje obmedzené pokusy o pripojenie, riadenie prístupu a správu životného cyklu.

Po úspechu bajty patria protokolu služby

Úspešná odpoveď CONNECT zmení spojenie na bajtový tok. Ak je cieľom web HTTPS, jeho výmena TLS prebieha v tomto toku. Samotné tunelovanie nevyžaduje, aby proxy vydala náhradný certifikát webu.

Pred prijatím CONNECT môže chyba HTTP vysvetliť dôvod odmietnutia. Po prijatí by zápis HTTP 500 do toku vstrekol bajty do tunelovaného protokolu. Pri neskorších zlyhaniach radšej ukončite alebo zrušte príslušné spojenia.

Spojte oba smery pomocou spracovanie toku s ohľadom na protitlak a rozhodnite, ako udalosti end, error a close ukončia partnera. Zachovajte počiatočný buffer head ako súčasť rovnakého modelu vlastníctva; sú to aplikačné dáta, nie nadbytočné hlavičky HTTP na zahodenie.

Súvisiace články