CONNECT-meðhöndlarar Node.js verða að varðveita head-buffrið
Meðhöndlaðu CONNECT-socket og head-buffer Node á mörkum HTTP og göngs, og varðveittu bætin sem þegar eru lesin fram yfir hausana.
Node HTTP-þjónn meðhöndlar venjulega proxy-beiðni í gegnum beiðni-callback sinn. CONNECT fer aðra leið: þjónninn gefur út connect ásamt beiðninni, client-socketnum og head-buffri.
Sá atburður er afhendingin milli HTTP-þáttunar og göngs. Það er ekkert venjulegt ServerResponse-hlutur til að halda áfram að nota fyrir göngumferðina.
| Rök | Hvað það ber |
|---|---|
req | CONNECT-beiðnin, þar á meðal áfangastaðarvaldið og hausarnir |
clientSocket | Tengingin aftur til biðlarans |
head | Göngugögn sem Node hefur þegar lesið fram yfir HTTP-hausana, hugsanlega tóm |
Ljúktu HTTP-ákvörðuninni áður en bætum er miðlað
Staðfestu umbeðna hýsilinn og portið, beittu aðgangs- og auðkenningarstefnu proxysins og komdu á tengingu uppstreymis. CONNECT auðkennir vald eins og service.example:443; þátttu það form með IPv6-vald í huga í stað þess að kljúfa blint á hverjum tvípunkti.
Þegar göngin eru samþykkt skaltu senda farsæla HTTP-svarið og síðan lokatómrið. Sendu síðan öll head-bæti uppstreymis áður en haldið er áfram með síðari bætum frá client-socketnum. Að tengja nýjan gagnahlustara getur ekki endurheimt buffer sem þegar hefur verið afhentur meðhöndlaranum sérstaklega.
Opinbera göngudæmið í Node framkvæmir þá afhendingu með serverSocket.write(head) áður en tveimur straumstefnunum er tengt saman. Litla dæmið sýnir umskiptin; uppsettur proxy þarf líka takmörkuð tengitilraunir, aðgangsstýringar og lífsferilsmeðferð.
Eftir árangur tilheyra bætin þjónustuprotokollinni
Farsælt CONNECT-svar breytir tengingunni í bætastraum. Ef markið er HTTPS-vefsíða fer TLS-skiptin hennar innan þess straums. Að eingöngu gönguleggja hana krefst þess ekki að proxyið gefi út staðgengilsskírteini vefsíðu.
Áður en CONNECT er samþykkt getur HTTP-villa útskýrt hvers vegna var hafnað. Eftir samþykkt myndi skrifa HTTP 500 inn í strauminn sprauta bætum inn í gönguprotokollina. Ljúktu eða eyðileggðu frekar viðeigandi tengingum við síðari bilanir.
Tengdu báðar stefnur með straummeðferð með bakþrýstingsvitund, og ákveddu hvernig end-, error- og close-atburðir ljúka jafningjanum. Varðveittu upphaflega head-buffrið sem hluta af sama eignarhaldslíkani; það eru forritsgögn, ekki umfram HTTP-hausar til að henda.