Node.js CONNECT ಹ್ಯಾಂಡ್ಲರ್ಗಳು head ಬಫರ್ ಅನ್ನು ಸಂರಕ್ಷಿಸಬೇಕು
HTTP ನಿಂದ ಟನೆಲ್ಗೆ ಇರುವ ಗಡಿಯಲ್ಲಿ Node ನ CONNECT ಸಾಕೆಟ್ ಮತ್ತು head ಬಫರ್ ಅನ್ನು ನಿರ್ವಹಿಸಿ, ಹೆಡರ್ಗಳ ಆಚೆ ಈಗಾಗಲೇ ಓದಿದ ಬೈಟ್ಗಳನ್ನು ಸಂರಕ್ಷಿಸಿ.
Node HTTP ಸರ್ವರ್ ಸಾಮಾನ್ಯ ಪ್ರಾಕ್ಸಿ ವಿನಂತಿಯನ್ನು ತನ್ನ request callback ಮೂಲಕ ನಿರ್ವಹಿಸುತ್ತದೆ. CONNECT ಬೇರೆ ದಾರಿ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ: ಸರ್ವರ್ ವಿನಂತಿ, ಕ್ಲೈಂಟ್ ಸಾಕೆಟ್ ಮತ್ತು head ಬಫರ್ನೊಂದಿಗೆ connect ಅನ್ನು ಹೊರಡಿಸುತ್ತದೆ.
ಆ ಘಟನೆ HTTP ಪಾರ್ಸಿಂಗ್ ಮತ್ತು ಟನೆಲ್ ನಡುವಿನ ಹಸ್ತಾಂತರ. ಟನೆಲ್ ಮಾಡಿದ ಟ್ರಾಫಿಕ್ಗೆ ಬಳಸುವುದನ್ನು ಮುಂದುವರಿಸಲು ಸಾಮಾನ್ಯ ServerResponse ವಸ್ತು ಇಲ್ಲ.
| ಆರ್ಗ್ಯುಮೆಂಟ್ | ಅದು ಏನನ್ನು ಒಯ್ಯುತ್ತದೆ |
|---|---|
req | CONNECT ವಿನಂತಿ, ಅದರ ಗಮ್ಯ ಅಧಿಕಾರ ಮತ್ತು ಹೆಡರ್ಗಳು ಸೇರಿದಂತೆ |
clientSocket | ಕ್ಲೈಂಟ್ಗೆ ಹಿಂತಿರುಗುವ ಸಂಪರ್ಕ |
head | Node ಈಗಾಗಲೇ HTTP ಹೆಡರ್ಗಳ ಆಚೆ ಓದಿರುವ ಟನೆಲ್ ಡೇಟಾ, ಬಹುಶಃ ಖಾಲಿ |
ಬೈಟ್ಗಳನ್ನು ರಿಲೇ ಮಾಡುವ ಮೊದಲು HTTP ನಿರ್ಣಯವನ್ನು ಮುಗಿಸಿ
ವಿನಂತಿಸಿದ ಹೋಸ್ಟ್ ಮತ್ತು ಪೋರ್ಟ್ ಅನ್ನು ಮಾನ್ಯಗೊಳಿಸಿ, ಪ್ರಾಕ್ಸಿಯ ಪ್ರವೇಶ ಮತ್ತು ದೃಢೀಕರಣ ನೀತಿಯನ್ನು ಅನ್ವಯಿಸಿ ಮತ್ತು ಅಪ್ಸ್ಟ್ರೀಮ್ ಸಂಪರ್ಕವನ್ನು ಸ್ಥಾಪಿಸಿ. CONNECT service.example:443 ನಂತಹ ಅಧಿಕಾರವನ್ನು ಗುರುತಿಸುತ್ತದೆ; ಪ್ರತಿ ಕೋಲನ್ ಬಳಿ ಕುರುಡಾಗಿ ವಿಭಜಿಸುವ ಬದಲು IPv6 ಅಧಿಕಾರಗಳನ್ನು ಗಮನದಲ್ಲಿಟ್ಟುಕೊಂಡು ಆ ರೂಪವನ್ನು ಪಾರ್ಸ್ ಮಾಡಿ.
ಟನೆಲ್ ಸ್ವೀಕರಿಸಿದಾಗ, ಯಶಸ್ವಿ HTTP ಪ್ರತಿಕ್ರಿಯೆ ಮತ್ತು ಅದನ್ನು ಮುಗಿಸುವ ಖಾಲಿ ಸಾಲನ್ನು ಕಳುಹಿಸಿ. ನಂತರ ಕ್ಲೈಂಟ್ ಸಾಕೆಟ್ನಿಂದ ಬರುವ ಮುಂದಿನ ಬೈಟ್ಗಳೊಂದಿಗೆ ಮುಂದುವರಿಯುವ ಮೊದಲು ಯಾವುದೇ head ಬೈಟ್ಗಳನ್ನು ಅಪ್ಸ್ಟ್ರೀಮ್ಗೆ ಕಳುಹಿಸಿ. ಹೊಸ ಡೇಟಾ ಆಲಿಸುವವರನ್ನು ಜೋಡಿಸುವುದರಿಂದ ಹ್ಯಾಂಡ್ಲರ್ಗೆ ಪ್ರತ್ಯೇಕವಾಗಿ ನೀಡಲಾದ ಬಫರ್ ಅನ್ನು ಮರಳಿ ಪಡೆಯಲು ಸಾಧ್ಯವಿಲ್ಲ.
Node ನ ಅಧಿಕೃತ ಟನೆಲಿಂಗ್ ಉದಾಹರಣೆ ಎರಡು ಸ್ಟ್ರೀಮ್ ದಿಕ್ಕುಗಳನ್ನು ಸಂಪರ್ಕಿಸುವ ಮೊದಲು serverSocket.write(head) ನೊಂದಿಗೆ ಆ ಹಸ್ತಾಂತರವನ್ನು ಮಾಡುತ್ತದೆ. ಅದರ ಸಣ್ಣ ಉದಾಹರಣೆ ಪರಿವರ್ತನೆಯನ್ನು ತೋರಿಸುತ್ತದೆ; ನಿಯೋಜಿತ ಪ್ರಾಕ್ಸಿಗೆ ಸೀಮಿತ ಸಂಪರ್ಕ ಪ್ರಯತ್ನಗಳು, ಪ್ರವೇಶ ನಿಯಂತ್ರಣಗಳು ಮತ್ತು ಜೀವನಚಕ್ರ ನಿರ್ವಹಣೆಯೂ ಬೇಕು.
ಯಶಸ್ಸಿನ ನಂತರ, ಬೈಟ್ಗಳು ಸೇವಾ ಪ್ರೋಟೋಕಾಲ್ಗೆ ಸೇರಿವೆ
ಯಶಸ್ವಿ CONNECT ಪ್ರತಿಕ್ರಿಯೆ ಸಂಪರ್ಕವನ್ನು ಬೈಟ್ ಸ್ಟ್ರೀಮ್ ಆಗಿ ಬದಲಾಯಿಸುತ್ತದೆ. ಗುರಿ HTTPS ಸೈಟ್ ಆಗಿದ್ದರೆ, ಅದರ TLS ವಿನಿಮಯ ಆ ಸ್ಟ್ರೀಮ್ನೊಳಗೆ ನಡೆಯುತ್ತದೆ. ಕೇವಲ ಟನೆಲ್ ಮಾಡುವುದು ಪ್ರಾಕ್ಸಿಯು ಪರ್ಯಾಯ ವೆಬ್ಸೈಟ್ ಪ್ರಮಾಣಪತ್ರವನ್ನು ನೀಡಬೇಕೆಂದು ಒತ್ತಾಯಿಸುವುದಿಲ್ಲ.
CONNECT ಸ್ವೀಕರಿಸುವ ಮೊದಲು, HTTP ದೋಷವು ಏಕೆ ನಿರಾಕರಿಸಲಾಗಿದೆ ಎಂಬುದನ್ನು ವಿವರಿಸಬಹುದು. ಸ್ವೀಕರಿಸಿದ ನಂತರ, ಸ್ಟ್ರೀಮ್ಗೆ HTTP 500 ಬರೆಯುವುದು ಟನೆಲ್ ಪ್ರೋಟೋಕಾಲ್ಗೆ ಬೈಟ್ಗಳನ್ನು ಚುಚ್ಚುತ್ತದೆ. ಬದಲಾಗಿ ನಂತರದ ವೈಫಲ್ಯಗಳಲ್ಲಿ ಸೂಕ್ತ ಸಂಪರ್ಕಗಳನ್ನು ಕೊನೆಗೊಳಿಸಿ ಅಥವಾ ನಾಶಪಡಿಸಿ.
ಎರಡೂ ದಿಕ್ಕುಗಳನ್ನು ಬ್ಯಾಕ್ಪ್ರೆಶರ್-ಅರಿವಿನ ಸ್ಟ್ರೀಮ್ ನಿರ್ವಹಣೆ ನೊಂದಿಗೆ ಸಂಪರ್ಕಿಸಿ, ಮತ್ತು end, error ಮತ್ತು close ಘಟನೆಗಳು ಸಹಚರರನ್ನು ಹೇಗೆ ಕೊನೆಗೊಳಿಸುತ್ತವೆ ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸಿ. ಆರಂಭಿಕ head ಬಫರ್ ಅನ್ನು ಅದೇ ಮಾಲೀಕತ್ವ ಮಾದರಿಯ ಭಾಗವಾಗಿ ಸಂರಕ್ಷಿಸಿ; ಅದು ಅಪ್ಲಿಕೇಶನ್ ಡೇಟಾ, ಎಸೆಯಬೇಕಾದ ಹೆಚ್ಚುವರಿ HTTP ಹೆಡರ್ಗಳಲ್ಲ.