Node.js CONNECT-handlerar mugu varðveita head-bufferen
Handfara Node CONNECT-socketa og head-buffer við markið millum HTTP og tunnel, og varðveita tær bytes, sum longu eru lisnar fram yvir headers.
Ein Node HTTP-ambætari handfarar eina vanliga proxy-umbon um sína umbon-callback. CONNECT fer aðra leið: ambætarin sendir connect saman við umbonini, klient-socketinum og einum head-buffer.
Hendingin er handarøkjan millum HTTP-greining og ein tunnel. Tað er eingin vanligur ServerResponse-lutur at halda fram at brúka til tunneltrafikkið.
| Argument | Hvat tað ber |
|---|---|
req | CONNECT-umbonin, eisini við mál-oyðuleikan og headers |
clientSocket | Sambandið aftur til klientin |
head | Tunneldátur, sum Node longu hevur lisna fram yvir HTTP-headers, kanska tómar |
Ger HTTP-avgerðina liðna, áðrenn bytes verða send víðari
Vátta umbidna host og port, brúka atgongd- og sannroyndarpolitikk proxysins og stovna sambandið uppstreymis. CONNECT eyðkennir ein oyðuleika sum service.example:443; greina tað sniðið við IPv6-oyðuleikum í huga heldur enn at býta blindandi á hvørjum kolon.
Tá tunnilin verður góðtikin, send tann góða HTTP-svarið og síðan tann endandi tóma linjuna. Send so hvørji head-bytes uppstreymis, áðrenn tú heldur fram við seinni bytes frá klient-socketinum. At festa ein nýggjan dátu-lyttara kann ikki vinna aftur eina buffer, sum longu er latin handlerinum serstakliga.
Almennu tunnel-royndin hjá Node ger ta handarøkjuna við serverSocket.write(head), áðrenn teir báðir streymleidirnir verða sambundnir. Tann lítla royndin vísir umskiftið; ein útisetur proxy tørvur eisini á avmarkaðum sambandsroyndum, atgongd-eftirliti og lívsløps-handføring.
Eftir góðan úrslit tilheyra bytes tænastuprotokollini
Eitt gott CONNECT-svar broytir sambandið til ein byte-streym. Um málið er ein HTTPS-veitsla, fer TLS-umsjóttin innanfyri tann streymin. Bara at tunna tað krevur ikki, at proxyið útvegar eitt avloysandi veitslu-skjal.
Áðrenn CONNECT verður góðtikið, kann ein HTTP-villa greiða frá, hví tað varð avvíst. Eftir góðtøku fór at skriva eitt HTTP 500 í streymin at spræna bytes inn í tunnelprotokollina. Enda ella oyðlegg heldur tey røttu sambondini við seinni sviktum.
Sambind báðar leidir við streymhandfaring við mótstøðu-varðleika, og áset, hvussu end-, error- og close-hendingar enda mótsetningin. Varðveit tann upprunaliga head-buffer sum part av sama eigaradømi; tað er applikatiónsdátur, ikki yvirfloyðilig HTTP-headers at kasta burt.