Awọn oluṣakoso CONNECT ti Node.js gbọdọ tọju head buffer
Ṣakoso CONNECT socket ati head buffer Node ni aala HTTP si tunnel, tọju awọn baiti ti a ti ka tẹlẹ ju headers lọ.
Node HTTP server nṣakoso ibeere proxy lasan nipasẹ request callback rẹ. CONNECT gba ọna miiran: server naa tu connect jade pẹlu ibeere naa, client socket ati head buffer.
Iṣẹlẹ yẹn ni ifilọlẹ laarin HTTP parsing ati tunnel kan. Ko si ohun ServerResponse lasan lati tẹsiwaju lilo fun iṣowo tunnel naa.
| Ariyanjiyan | Ohun ti o gbe |
|---|---|
req | Ibeere CONNECT, pẹlu aṣẹ ibi-afẹde rẹ ati awọn headers |
clientSocket | Asopọ pada si alabara |
head | Data tunnel ti Node ti ka tẹlẹ ju awọn headers HTTP lọ, o le jẹ ofo |
Pari ipinnu HTTP ṣaaju gbigbe awọn baiti
Ṣayẹwo host ati port ti a beere, lo eto imulo iwọle ati ijẹrisi ti proxy, ki o si ṣeto asopọ oke. CONNECT ṣe idanimọ aṣẹ bi service.example:443; ṣe itupalẹ fọọmu yẹn pẹlu awọn aṣẹ IPv6 ni lokan dipo pipin ni afọju ni gbogbo aami idoju meji.
Nigbati a ba gba tunnel naa, fi esi HTTP ti o ṣaṣeyọri ranṣẹ pẹlu ila ofo ti o pari rẹ. Lẹhinna gbe eyikeyi baiti head si oke ṣaaju ki o to tẹsiwaju pẹlu awọn baiti ti o tẹle lati client socket. Sisopọ olutẹtisi data tuntun ko le gba buffer ti a ti fi lọtọ fun oluṣakoso pada.
Apẹẹrẹ tunnel osise ti Node ṣe ifilọlẹ yẹn pẹlu serverSocket.write(head) ṣaaju ki o to so awọn itọsọna ṣiṣan meji pọ. Apẹẹrẹ kekere rẹ ṣe apejuwe iyipada; proxy ti a ti gbe lọ tun nilo awọn igbiyanju asopọ ti o ni opin, awọn iṣakoso iwọle ati iṣakoso igbesi aye.
Lẹhin aṣeyọri, awọn baiti jẹ ti ilana iṣẹ naa
Esi CONNECT ti o ṣaṣeyọri yi asopọ pada si ṣiṣan baiti. Ti ibi-afẹde ba jẹ aaye HTTPS, paṣipaarọ TLS rẹ n rin inu ṣiṣan yẹn. Kiki tunnel rẹ ko nilo ki proxy gbe iwe-ẹri aaye ayelujara rọpo jade.
Ṣaaju gbigba CONNECT, aṣiṣe HTTP le ṣalaye idi ti o fi kọ. Lẹhin gbigba, kikọ HTTP 500 sinu ṣiṣan yoo fa awọn baiti sinu ilana tunnel. Dipo, pari tabi pa awọn asopọ ti o yẹ run ni awọn ikuna nigbamii.
So awọn itọsọna mejeeji pọ pẹlu iṣakoso ṣiṣan ti o mọ nipa titẹ ẹhin, ki o pinnu bii awọn iṣẹlẹ end, error ati close ṣe pari ẹlẹgbẹ naa. Tọju head buffer akọkọ gẹgẹbi apakan ti awoṣe nini kanna; data ohun elo ni, kii ṣe awọn headers HTTP afikun lati sọnù.