Node.js CONNECT கையாள்பவர்கள் head buffer-ஐ பாதுகாக்க வேண்டும்
HTTP-லிருந்து tunnel வரையிலான எல்லையில் Node-இன் CONNECT socket மற்றும் head buffer-ஐ கையாளுங்கள், headers-க்கு அப்பால் ஏற்கனவே படிக்கப்பட்ட bytes-ஐ பாதுகாத்து.
Node HTTP சேவையகம் சாதாரண proxy கோரிக்கையை அதன் request callback மூலம் கையாள்கிறது. CONNECT வேறு பாதையை எடுக்கிறது: சேவையகம் கோரிக்கை, client socket மற்றும் head buffer உடன் connect-ஐ வெளியிடுகிறது.
அந்த நிகழ்வு HTTP பாகுபடுத்தல் மற்றும் tunnel இடையேயான ஒப்படைப்பு. tunnel செய்யப்பட்ட போக்குவரத்திற்கு தொடர்ந்து பயன்படுத்த சாதாரண ServerResponse பொருள் இல்லை.
| வாதம் | அது எதைச் சுமக்கிறது |
|---|---|
req | CONNECT கோரிக்கை, அதன் இலக்கு அதிகாரம் மற்றும் headers உட்பட |
clientSocket | client-க்கு திரும்பும் இணைப்பு |
head | Node ஏற்கனவே HTTP headers-க்கு அப்பால் படித்த tunnel தரவு, ஒருவேளை காலியாக |
bytes-ஐ அனுப்பும் முன் HTTP முடிவை முடிக்கவும்
கோரப்பட்ட host மற்றும் port-ஐ சரிபார்க்கவும், proxy-இன் அணுகல் மற்றும் அங்கீகாரக் கொள்கையைப் பயன்படுத்தவும், மேல்நோக்கிய இணைப்பை நிறுவவும். CONNECT service.example:443 போன்ற அதிகாரத்தை அடையாளம் காட்டுகிறது; ஒவ்வொரு கொலனிலும் கண்மூடித்தனமாகப் பிரிப்பதற்குப் பதிலாக IPv6 அதிகாரங்களைக் கருத்தில் கொண்டு அந்த வடிவத்தைப் பாகுபடுத்துங்கள்.
tunnel ஏற்கப்பட்டதும், வெற்றிகரமான HTTP பதிலையும் அதை முடிக்கும் காலி வரியையும் அனுப்புங்கள். பின்னர் client socket-இலிருந்து வரும் அடுத்தடுத்த bytes-உடன் தொடர்வதற்கு முன் எந்த head byte-ஐயும் மேல்நோக்கி அனுப்புங்கள். புதிய தரவு கேட்பானை இணைப்பதால் ஏற்கனவே கையாள்பவருக்கு தனியாக வழங்கப்பட்ட buffer-ஐ மீட்டெடுக்க முடியாது.
Node-இன் அதிகாரப்பூர்வ tunnel எடுத்துக்காட்டு இரண்டு stream திசைகளையும் இணைப்பதற்கு முன் serverSocket.write(head) மூலம் அந்த ஒப்படைப்பைச் செய்கிறது. அதன் சிறிய எடுத்துக்காட்டு மாற்றத்தை விளக்குகிறது; வரிசைப்படுத்தப்பட்ட proxy-க்கு வரம்பிடப்பட்ட இணைப்பு முயற்சிகள், அணுகல் கட்டுப்பாடுகள் மற்றும் வாழ்க்கைச் சுழற்சி நிர்வாகமும் தேவை.
வெற்றிக்குப் பிறகு, bytes சேவை நெறிமுறைக்கு உரியவை
வெற்றிகரமான CONNECT பதில் இணைப்பை byte stream ஆக மாற்றுகிறது. இலக்கு HTTPS தளமாக இருந்தால், அதன் TLS பரிமாற்றம் அந்த stream-க்குள் நடைபெறுகிறது. வெறுமனே tunnel செய்வது proxy தளத்தின் மாற்றுச் சான்றிதழை வழங்க வேண்டும் என்று கட்டாயப்படுத்தாது.
CONNECT-ஐ ஏற்பதற்கு முன், HTTP பிழை நிராகரிப்பதற்கான காரணத்தை விளக்கக்கூடும். ஏற்றுக்கொண்ட பிறகு, stream-இல் HTTP 500 எழுதுவது tunnel நெறிமுறையில் bytes-ஐ செலுத்தும். அதற்குப் பதிலாக, பிந்தைய தோல்விகளில் பொருத்தமான இணைப்புகளை முடிக்கவும் அல்லது அழிக்கவும்.
இரு திசைகளையும் பின்னழுத்தம்-விழிப்புணர்வு stream கையாளுதல் மூலம் இணைக்கவும், end, error மற்றும் close நிகழ்வுகள் துணையை எவ்வாறு முடிக்கின்றன என்பதைத் தீர்மானிக்கவும். ஆரம்ப head buffer-ஐ அதே உரிமை மாதிரியின் பகுதியாகப் பாதுகாக்கவும்; அது பயன்பாட்டுத் தரவு, தூக்கி எறிய வேண்டிய கூடுதல் HTTP headers அல்ல.