OpenJDK 25-də Java Socket HTTP CONNECT tunelləri
OpenJDK 25-də HTTP proxy socket yolundan istifadə edərək icazə verilmiş TCP xidmətinə çatın, proxy son nöqtəsi ilə təyinatı isə ayrı saxlayın.
Fərdi TCP protokolu, proxy həmin təyinat üçün CONNECT-ə icazə verdikdə HTTP proxy-dən keçə bilər. Tətbiq protokolu HTTP-yə çevrilmək məcburiyyətində deyil: HTTP tuneli qurur, sonra tətbiq öz baytlarını onun içində mübadilə edir.
OpenJDK 25 Socket(Proxy) daxilində HTTP proxy yolu təqdim edir. Onun tətbiqi CONNECT mübadiləsini yerinə yetirir və tətbiqin istifadəsi üçün qoşulmuş socket qaytarır.
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();
}Bu fraqment java.net və java.io siniflərindən istifadə edir. İki son nöqtəni dəyişdirin və try blokundan çıxmazdan əvvəl protokol mübadiləsini yerinə yetirin. İcazə verilmiş ictimai TCP hədəfi üçün HTTP proxy siyahısından HTTP namizədlərini yalnız həmin hədəfin portu üçün CONNECT icazəsini yoxladıqdan sonra seçin. Proxy ünvanı Java-nın ilk qoşulduğu yerdir; connect-ə verilən ünvan isə proxy-nin çatmalı olduğu xidməti müəyyən edir.
Həll edilməmiş təyinat bu tətbiqin CONNECT sorğusu üçün host adını saxlayır. Həll edilmiş InetSocketAddress isə bunun əvəzinə həmin sorğuya həll edilmiş IP ünvanını verir. Bu fərq proxy xidmət adını həll etməli olduqda və ya host adına əsaslanan siyasət tətbiq etməli olduqda vacibdir.
Uğurlu bağlantı sizə nə qazandırır
Yaranan axınlar tunellənmiş xidmətin məlumatlarını daşıyır. Onlar tətbiqinizin oxuyub atmalı olduğu ayrıca HTTP cavabı göstərmir. İkinci CONNECT mübadiləsi əlavə etmək, JDK tuneli artıq qurduqdan sonra xidmətə HTTP mətni göndərərdi.
Nümunə bağlantı vaxt limiti və socket oxuma vaxt limiti təqdim edir; bunlar ayrı idarəetmə vasitələridir, tətbiq sessiyası üçün vahid ümumi son tarix deyil.
CONNECT icazəsi hələ də proxy-yə aiddir. Adi veb sorğularını ötürən son nöqtə xidmətin portunu rədd edə və ya tunel açmazdan əvvəl autentifikasiya tələb edə bilər. Bu uğursuzluqları tuneli qəbul edib sonra tətbiq protokolunuzu rədd edən serverdən ayrı saxlayın.
Əgər həmin protokol TLS tələb edirsə, TLS-i qoşulmuş socket vasitəsilə xidmətin nəzərdə tutulan host adı və normal sertifikat yoxlamaları ilə razılaşdırın. Tək CONNECT axını şifrələmir. Əsl HTTP API üçün HTTP müştərisi HTTP mesajlarını da idarə etdiyi üçün daha rahat interfeys olaraq qalır.