OpenJDK 25 ਵਿੱਚ Java Socket HTTP CONNECT ਟਨਲ
OpenJDK 25 ਵਿੱਚ HTTP ਪ੍ਰਾਕਸੀ ਸਾਕਟ ਮਾਰਗ ਵਰਤ ਕੇ ਮਨਜ਼ੂਰਸ਼ੁਦਾ TCP ਸੇਵਾ ਤੱਕ ਪਹੁੰਚੋ, ਜਦੋਂ ਕਿ ਪ੍ਰਾਕਸੀ ਐਂਡਪੁਆਇੰਟ ਅਤੇ ਮੰਜ਼ਿਲ ਨੂੰ ਵੱਖਰਾ ਰੱਖੋ।
ਇੱਕ ਕਸਟਮ TCP ਪ੍ਰੋਟੋਕੋਲ HTTP ਪ੍ਰਾਕਸੀ ਵਿੱਚੋਂ ਲੰਘ ਸਕਦਾ ਹੈ ਜਦੋਂ ਉਹ ਪ੍ਰਾਕਸੀ ਮੰਜ਼ਿਲ ਵੱਲ CONNECT ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। ਐਪਲੀਕੇਸ਼ਨ ਪ੍ਰੋਟੋਕੋਲ ਨੂੰ HTTP ਬਣਨ ਦੀ ਲੋੜ ਨਹੀਂ: HTTP ਟਨਲ ਸਥਾਪਿਤ ਕਰਦਾ ਹੈ, ਫਿਰ ਐਪਲੀਕੇਸ਼ਨ ਆਪਣੇ ਬਾਈਟ ਅੰਦਰ ਬਦਲਦਾ ਹੈ।
OpenJDK 25 Socket(Proxy) ਵਿੱਚ HTTP ਪ੍ਰਾਕਸੀ ਮਾਰਗ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ। ਇਸ ਦਾ ਅਮਲ CONNECT ਬਦਲਾਅ ਕਰਦਾ ਹੈ ਅਤੇ ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਵਰਤੋਂ ਲਈ ਜੁੜਿਆ ਸਾਕਟ ਵਾਪਸ ਕਰਦਾ ਹੈ।
Proxy route = new Proxy(
Proxy.Type.HTTP,
new InetSocketAddress("proxy.example", 8080));
try (Socket socket = new Socket(route)) {
socket.setSoTimeout(10000);
socket.connect(
InetSocketAddress.createUnresolved("tcp-service.example", 8443),
5000);
InputStream input = socket.getInputStream();
OutputStream output = socket.getOutputStream();
}ਇਹ ਟੁਕੜਾ java.net ਅਤੇ java.io ਦੀਆਂ ਕਲਾਸਾਂ ਵਰਤਦਾ ਹੈ। ਦੋਵੇਂ ਐਂਡਪੁਆਇੰਟ ਬਦਲੋ ਅਤੇ try ਬਲਾਕ ਛੱਡਣ ਤੋਂ ਪਹਿਲਾਂ ਪ੍ਰੋਟੋਕੋਲ ਬਦਲਾਅ ਕਰੋ। ਮਨਜ਼ੂਰਸ਼ੁਦਾ ਜਨਤਕ TCP ਟਾਰਗਟ ਲਈ, ਉਸ ਟਾਰਗਟ ਦੇ ਪੋਰਟ ਲਈ CONNECT ਆਗਿਆ ਜਾਂਚਣ ਤੋਂ ਬਾਅਦ ਹੀ HTTP ਪ੍ਰਾਕਸੀ ਸੂਚੀ ਵਿੱਚੋਂ HTTP ਉਮੀਦਵਾਰ ਚੁਣੋ। ਪ੍ਰਾਕਸੀ ਪਤਾ ਉਹ ਥਾਂ ਹੈ ਜਿੱਥੇ Java ਪਹਿਲਾਂ ਜੁੜਦਾ ਹੈ; connect ਨੂੰ ਦਿੱਤਾ ਪਤਾ ਉਸ ਸੇਵਾ ਦੀ ਪਛਾਣ ਕਰਦਾ ਹੈ ਜਿੱਥੇ ਪ੍ਰਾਕਸੀ ਨੂੰ ਪਹੁੰਚਣਾ ਚਾਹੀਦਾ ਹੈ।
ਅਣਸੁਲਝੀ ਮੰਜ਼ਿਲ ਇਸ ਅਮਲ ਦੀ CONNECT ਬੇਨਤੀ ਲਈ ਆਪਣਾ ਹੋਸਟਨਾਮ ਰੱਖਦੀ ਹੈ। ਇਸ ਦੇ ਉਲਟ ਸੁਲਝਿਆ InetSocketAddress ਉਸ ਬੇਨਤੀ ਨੂੰ ਆਪਣਾ ਸੁਲਝਿਆ IP ਪਤਾ ਦਿੰਦਾ ਹੈ। ਇਹ ਫ਼ਰਕ ਉਦੋਂ ਮਹੱਤਵਪੂਰਨ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਪ੍ਰਾਕਸੀ ਨੂੰ ਸੇਵਾ ਦਾ ਨਾਮ ਸੁਲਝਾਉਣਾ ਹੋਵੇ ਜਾਂ ਹੋਸਟਨਾਮ-ਅਧਾਰਿਤ ਨੀਤੀ ਲਾਗੂ ਕਰਨੀ ਹੋਵੇ।
ਸਫਲ ਕਨੈਕਸ਼ਨ ਤੁਹਾਡੇ ਕੋਲ ਕੀ ਛੱਡਦਾ ਹੈ
ਨਤੀਜੇ ਵਜੋਂ ਮਿਲਣ ਵਾਲੀਆਂ ਸਟਰੀਮਾਂ ਟਨਲ ਕੀਤੀ ਸੇਵਾ ਦਾ ਡੇਟਾ ਲੈ ਕੇ ਚੱਲਦੀਆਂ ਹਨ। ਉਹ ਵੱਖਰਾ HTTP ਜਵਾਬ ਪ੍ਰਗਟ ਨਹੀਂ ਕਰਦੀਆਂ ਜਿਸ ਨੂੰ ਤੁਹਾਡੇ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਪੜ੍ਹ ਕੇ ਸੁੱਟਣਾ ਚਾਹੀਦਾ ਹੈ। ਦੂਜਾ CONNECT ਬਦਲਾਅ ਜੋੜਨ ਨਾਲ JDK ਵੱਲੋਂ ਟਨਲ ਪਹਿਲਾਂ ਹੀ ਸਥਾਪਿਤ ਕਰਨ ਤੋਂ ਬਾਅਦ ਸੇਵਾ ਨੂੰ HTTP ਟੈਕਸਟ ਭੇਜਿਆ ਜਾਵੇਗਾ।
ਉਦਾਹਰਨ ਕਨੈਕਸ਼ਨ ਟਾਈਮਆਉਟ ਅਤੇ ਸਾਕਟ ਪੜ੍ਹਨ ਦਾ ਟਾਈਮਆਉਟ ਦਿੰਦੀ ਹੈ; ਇਹ ਵੱਖਰੇ ਨਿਯੰਤਰਣ ਹਨ, ਐਪਲੀਕੇਸ਼ਨ ਸੈਸ਼ਨ ਲਈ ਇੱਕ ਸਮੁੱਚੀ ਸਮਾਂ-ਸੀਮਾ ਨਹੀਂ।
CONNECT ਆਗਿਆ ਅਜੇ ਵੀ ਪ੍ਰਾਕਸੀ ਦੀ ਹੈ। ਆਮ ਵੈੱਬ ਬੇਨਤੀਆਂ ਅੱਗੇ ਭੇਜਣ ਵਾਲਾ ਐਂਡਪੁਆਇੰਟ ਸੇਵਾ ਦਾ ਪੋਰਟ ਇਨਕਾਰ ਕਰ ਸਕਦਾ ਹੈ ਜਾਂ ਟਨਲ ਖੋਲ੍ਹਣ ਤੋਂ ਪਹਿਲਾਂ ਪ੍ਰਮਾਣਿਕਤਾ ਮੰਗ ਸਕਦਾ ਹੈ। ਉਹ ਅਸਫਲਤਾਵਾਂ ਉਸ ਸਰਵਰ ਤੋਂ ਵੱਖ ਰੱਖੋ ਜੋ ਟਨਲ ਸਵੀਕਾਰ ਕਰਦਾ ਹੈ ਪਰ ਬਾਅਦ ਵਿੱਚ ਤੁਹਾਡੇ ਐਪਲੀਕੇਸ਼ਨ ਪ੍ਰੋਟੋਕੋਲ ਨੂੰ ਇਨਕਾਰ ਕਰਦਾ ਹੈ।
ਜੇ ਉਸ ਪ੍ਰੋਟੋਕੋਲ ਨੂੰ TLS ਚਾਹੀਦਾ ਹੈ, ਤਾਂ ਜੁੜੇ ਸਾਕਟ ਰਾਹੀਂ ਸੇਵਾ ਦੇ ਇੱਛਤ ਹੋਸਟਨਾਮ ਅਤੇ ਆਮ ਸਰਟੀਫਿਕੇਟ ਜਾਂਚ ਨਾਲ TLS ਗੱਲਬਾਤ ਕਰੋ। ਸਿਰਫ਼ CONNECT ਸਟਰੀਮ ਨੂੰ ਇਨਕ੍ਰਿਪਟ ਨਹੀਂ ਕਰਦਾ। ਅਸਲ HTTP API ਲਈ, HTTP ਕਲਾਇੰਟ HTTP ਸੁਨੇਹੇ ਵੀ ਸੰਭਾਲਦਾ ਹੈ ਇਸ ਲਈ ਵਧੇਰੇ ਸੁਵਿਧਾਜਨਕ ਇੰਟਰਫ਼ੇਸ ਰਹਿੰਦਾ ਹੈ।