Ang isang Node HTTP server ay humahawak ng ordinaryong proxy request sa pamamagitan ng request callback nito. Ang CONNECT ay dumadaan sa ibang landas: ibinubuga ng server ang connect kasama ng request, client socket at head buffer.

Ang kaganapang iyon ang paghahatid sa pagitan ng HTTP parsing at isang tunnel. Walang ordinaryong ServerResponse object na maaaring ipagpatuloy gamitin para sa tunnelled na trapiko.

ArgumentoAno ang dinadala nito
reqAng CONNECT request, kabilang ang destination authority at mga header nito
clientSocketAng koneksyon pabalik sa client
headTunnel data na nabasa na ng Node lampas sa mga HTTP header, posibleng walang laman

Tapusin ang desisyong HTTP bago mag-relay ng mga byte

I-validate ang hinihiling na host at port, ilapat ang access at authentication policy ng proxy, at itatag ang upstream connection. Kinikilala ng CONNECT ang isang authority tulad ng service.example:443; suriin ang form na iyon nang isinasaalang-alang ang mga IPv6 authority sa halip na bulag na hatiin sa bawat tutuldok.

Kapag tinanggap ang tunnel, ipadala ang matagumpay na HTTP response kasunod ang nagtatapos na blangkong linya. Pagkatapos, ipasa ang anumang head byte pataas bago magpatuloy sa mga susunod na byte mula sa client socket. Ang paglakip ng bagong data listener ay hindi makakabawi ng buffer na naipadala nang hiwalay sa handler.

Isinasagawa ng opisyal na halimbawa ng tunnelling ng Node ang paghahatid na iyon gamit ang serverSocket.write(head) bago ikonekta ang dalawang direksyon ng stream. Inilalarawan ng maliit na halimbawa nito ang paglipat; ang naka-deploy na proxy ay nangangailangan din ng limitadong pagtatangka ng koneksyon, mga kontrol sa access at pamamahala ng lifecycle.

Pagkatapos ng tagumpay, ang mga byte ay pag-aari ng protocol ng serbisyo

Binabago ng matagumpay na CONNECT response ang koneksyon tungo sa isang byte stream. Kung ang target ay isang HTTPS site, naglalakbay ang TLS exchange nito sa loob ng stream na iyon. Ang pag-tunnel lamang nito ay hindi nangangailangan na mag-isyu ang proxy ng kapalit na certificate ng website.

Bago tanggapin ang CONNECT, maaaring ipaliwanag ng HTTP error kung bakit tinanggihan. Pagkatapos ng pagtanggap, ang pagsulat ng HTTP 500 sa stream ay maglalagay ng mga byte sa tunnelled protocol. Sa halip, tapusin o sirain ang angkop na mga koneksyon sa mga susunod na pagkabigo.

Ikonekta ang parehong direksyon gamit ang paghawak ng stream na may kamalayan sa backpressure, at magpasya kung paano tinatapos ng end, error at close na mga kaganapan ang peer. Panatilihin ang inisyal na head buffer bilang bahagi ng parehong modelo ng pagmamay-ari; ito ay data ng application, hindi sobrang HTTP header na itatapon.

Kaugnay na mga artikulo