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ð.

ArgumentHvat tað ber
reqCONNECT-umbonin, eisini við mál-oyðuleikan og headers
clientSocketSambandið aftur til klientin
headTunneldá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.

Skyldar greinar