'n Node HTTP-bediener hanteer 'n gewone proxyversoek deur sy versoek-terugroep. CONNECT volg 'n ander pad: die bediener stuur connect saam met die versoek, die kliëntsok en 'n head-buffer.

Daardie gebeurtenis is die oorhandiging tussen HTTP-ontleding en 'n tonnel. Daar is geen gewone ServerResponse-objek om vir die tonnelverkeer aan te hou gebruik nie.

ArgumentWat dit dra
reqDie CONNECT-versoek, insluitend sy bestemming-outoriteit en opkoppe
clientSocketDie verbinding terug na die kliënt
headTonneldata wat Node reeds anderkant die HTTP-opkoppe gelees het, moontlik leeg

Voltooi die HTTP-besluit voordat grepe deurgestuur word

Valideer die versoekte gasheer en poort, pas die proxy se toegangs- en verifikasiebeleid toe en stel die opstroomverbinding op. CONNECT identifiseer 'n outoriteit soos service.example:443; ontleed daardie vorm met IPv6-outoriteite in gedagte eerder as om blindelings op elke dubbelpunt te split.

Wanneer die tonnel aanvaar word, stuur die suksesvolle HTTP-antwoord gevolg deur sy afsluitende leë lyn. Stuur dan enige head-grepe opstroom voordat daar met latere grepe van die kliëntsok voortgegaan word. Om 'n nuwe data-luisteraar te koppel kan nie 'n buffer herwin wat reeds afsonderlik aan die hanteerder gelewer is nie.

Node se amptelike tonnelvoorbeeld voer daardie oorhandiging met serverSocket.write(head) uit voordat die twee stroomrigtings verbind word. Sy klein voorbeeld illustreer die oorgang; 'n ontplooide proxy benodig ook begrensde verbindingspogings, toegangsbeheer en lewensiklushantering.

Na sukses behoort die grepe aan die diensprotokol

'n Suksesvolle CONNECT-antwoord verander die verbinding in 'n greepstroom. As die teiken 'n HTTPS-werf is, reis sy TLS-uitruiling binne daardie stroom. Om dit bloot te tonnel vereis nie dat die proxy 'n vervangingswebwerf-sertifikaat uitreik nie.

Voordat CONNECT aanvaar word, kan 'n HTTP-fout verduidelik waarom dit geweier is. Na aanvaarding sou die skryf van 'n HTTP 500 in die stroom grepe in die tonnelprotokol inspuit. Beëindig of vernietig eerder die toepaslike verbindings by latere foute.

Verbind beide rigtings met stroomhantering met terugdrukbewustheid, en besluit hoe end-, fout- en sluitgebeurtenisse die eweknie beëindig. Behou die aanvanklike head-buffer as deel van dieselfde eienaarskapmodel; dit is toepdata, nie oorbodige HTTP-opkoppe om weg te gooi nie.

Verwante artikels