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 ਹੈਡਰ ਨਹੀਂ।