Ein Node HTTP-server handterer ein vanleg proxyførespurnad gjennom request-callbacken sin. CONNECT går ein annan veg: serveren sender ut connect med førespurnaden, klientsocketen og ein head-buffer.

Den hendinga er overleveringa mellom HTTP-parsing og ein tunnel. Det finst ikkje noko vanleg ServerResponse-objekt å halde fram med å bruke for den tunnelerte trafikken.

ArgumentKva han ber
reqCONNECT-førespurnaden, inkludert målautoriteten og headerane
clientSocketSambandet tilbake til klienten
headTunneldata som Node alt har lese utover HTTP-headerane, moglegvis tomme

Fullfør HTTP-avgjerda før byte vert sende vidare

Valider ønskt vert og port, bruk tilgangs- og autentiseringspolitikken til proxyen, og opprett oppstraumsforbindelsen. CONNECT identifiserer ein autoritet som service.example:443; pars den forma med IPv6-autoritetar i tankane i staden for å dele blindt ved kvart kolon.

Når tunnelen er godteken, send det vellukka HTTP-svaret etterfølgt av den avsluttande tomme linja. Send deretter eventuelle head-byte oppstraums før du held fram med seinare byte frå klientsocketen. Å kople til ein ny data-lyttar kan ikkje gjenopprette ein buffer som alt er levert separat til handteraren.

Det offisielle tunneleringseksempelet til Node utfører den overleveringa med serverSocket.write(head) før dei to straumretningane vert kopla saman. Det vesle eksempelet illustrerer overgangen; ein utrulla proxy treng òg avgrensa tilkoplingsforsøk, tilgangskontrollar og livssyklushandtering.

Etter suksess høyrer byta til tenesteprotokollen

Eit vellukka CONNECT-svar gjer sambandet om til ein bytestraum. Viss målet er ein HTTPS-nettstad, går TLS-utvekslinga føre seg inne i den straumen. Berre å tunnelere han krev ikkje at proxyen gjev ut eit erstatningssertifikat for nettstaden.

Før CONNECT vert godteke, kan ein HTTP-feil forklare kvifor det vart avvist. Etter godtaking vil skriving av ein HTTP 500 i straumen injisere byte i den tunnelerte protokollen. Avslutt eller øydelegg i staden dei relevante sambanda ved seinare feil.

Kople begge retningar med straumhandtering med mottrykksmedvit, og avgjer korleis end-, error- og close-hendingar avsluttar motparten. Ta vare på den opphavlege head-bufferen som del av same eigarskapsmodell; det er applikasjonsdata, ikkje overflødige HTTP-headarar som skal kastast.

Relaterte artiklar