Node.js CONNECT-ôfhandlers moatte de head-buffer behâlde
Behannelje Node syn CONNECT-socket en head-buffer op 'e grins fan HTTP nei tunnel, en behâld de bytes dy't al foarby de kopteksten lêzen binne.
In Node HTTP-tsjinner behannelet in gewoan proxyfersyk fia syn fersyk-callback. CONNECT nimt in oare wei: de tsjinner stjoert connect út mei it fersyk, de kliïntsocket en in head-buffer.
Dat barren is de oerdracht tusken HTTP-parsearjen en in tunnel. Der is gjin gewoan ServerResponse-objekt om foar it tunnelferkear te bliuwen brûken.
| Argumint | Wat it draacht |
|---|---|
req | It CONNECT-fersyk, ynklusyf syn bestimming-autoriteit en kopteksten |
clientSocket | De ferbining werom nei de kliïnt |
head | Tunnelgegevens dy't Node al foarby de HTTP-kopteksten lêzen hat, mooglik leech |
Meitsje de HTTP-beslissing dien foardat bytes trochstjoerd wurde
Falidearje de frege host en poarte, pas it tagongs- en ferifikaasjebelied fan 'e proxy ta en meitsje de upstream-ferbining. CONNECT identifisearret in autoriteit lykas service.example:443; parsearje dy foarm mei IPv6-autoriteiten yn 't each, ynstee fan blind op elke dûbele punt te splitsen.
As de tunnel akseptearre is, stjoer dan it súksesfolle HTTP-antwurd folge troch syn ôfslutende lege rigel. Stjoer dêrnei alle head-bytes upstream foardat jo trochgeane mei lettere bytes fan 'e kliïntsocket. It tafoegjen fan in nije gegevenslistener kin in buffer net weromhelje dy't al apart oan 'e ôfhandeler levere is.
Node syn offisjele tunnelbyld docht dy oerdracht mei serverSocket.write(head) foardat de twa streamrjochtingen ferbûn wurde. Syn lytse byld yllustrearret de oergong; in útrôle proxy hat ek beheinde ferbiningspogingen, tagongskontrôles en libbenssyklusbehear nedich.
Nei súkses hearre de bytes ta it tsjinstprotokol
In súksesfol CONNECT-antwurd feroaret de ferbining yn in byte-stream. As it doel in HTTPS-side is, reizget syn TLS-útwikseling binnen dy stream. Allinnich tunnelje freget net dat de proxy in ferfangend webside-sertifikaat útjout.
Foardat CONNECT akseptearre wurdt, kin in HTTP-flater útlisje wêrom't it wegere is. Nei akseptaasje soe it skriuwen fan in HTTP 500 yn 'e stream bytes yn it tunnelprotokol ynjektearje. Beëinigje of ferneatigje ynstee de passende ferbiningen by lettere flaters.
Ferbin beide rjochtingen mei streambehear mei tsjindrukbewustwêzen, en beslute hoe't end-, error- en close-barrens de peer beëinigje. Behâld de earste head-buffer as part fan itselde eigendomsmodel; it binne applikaasjegegevens, gjin oerstallige HTTP-kopteksten om fuort te smiten.