ಕಸ್ಟಮ್ 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 ಸಂದೇಶಗಳನ್ನೂ ನಿರ್ವಹಿಸುವುದರಿಂದ ಹೆಚ್ಚು ಅನುಕೂಲಕರ ಇಂಟರ್‌ಫೇಸ್ ಆಗಿ ಉಳಿಯುತ್ತದೆ.

ಸಂಬಂಧಿತ ಲೇಖನಗಳು