Java Socketi HTTP CONNECT tunnelid OpenJDK 25-s
Kasutage OpenJDK 25-s HTTP-puhverserveri socketi teed, et jõuda lubatud TCP-teenuseni, hoides puhverserveri lõpp-punkti ja sihtkoha eraldi.
Kohandatud TCP-protokoll saab liikuda läbi HTTP-puhverserveri, kui see puhverserver lubab sihtkohale CONNECT-i. Rakenduse protokoll ei pea muutuma HTTP-ks: HTTP loob tunneli ja seejärel vahetab rakendus selle sees oma baite.
OpenJDK 25 pakub HTTP-puhverserveri teed asukohas Socket(Proxy). Selle teostus teeb CONNECT-vahetuse ja tagastab rakenduse kasutada ühendatud socketi.
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();
}See fragment kasutab klasse asukohast java.net ja java.io. Asendage kaks lõpp-punkti ja tehke protokolli vahetus enne try-plokist lahkumist. Lubatud avaliku TCP-sihtmärgi jaoks valige HTTP-kandidaadid HTTP-puhverserverite loendist alles pärast seda, kui olete kontrollinud CONNECT-i luba selle sihtmärgi pordi jaoks. Puhverserveri aadress on koht, kuhu Java esimesena ühendub; aadress, mis antakse edasi connect-le, määrab teenuse, millele puhverserver peaks jõudma.
Lahendamata sihtkoht säilitab oma hostinime selle teostuse CONNECT-päringu jaoks. Lahendatud InetSocketAddress edastab sellele päringule hoopis oma lahendatud IP-aadressi. See erinevus on oluline, kui puhverserver peab teenuse nime lahendama või rakendama hostinimel põhinevat poliitikat.
Mida õnnestunud ühendus teile jätab
Saadud vood kannavad tunnelisse pandud teenuse andmeid. Need ei paljasta eraldi HTTP-vastust, mida teie rakendus peaks lugema ja kõrvale heitma. Teise CONNECT-vahetuse lisamine saadaks teenusele HTTP-teksti pärast seda, kui JDK on tunneli juba loonud.
Näide seab ühenduse ajalõpu ja socketi lugemise ajalõpu; need on eraldi juhtimisvahendid, mitte üks üldine tähtaeg rakenduse sessiooni jaoks.
CONNECT-i luba kuulub endiselt puhverserverile. Lõpp-punkt, mis edastab tavalisi veebipäringuid, võib teenuse pordi tagasi lükata või nõuda enne tunneli avamist autentimist. Hoidke need tõrked eraldi serverist, mis võtab tunneli vastu, kuid lükkab hiljem teie rakenduse protokolli tagasi.
Kui see protokoll vajab TLS-i, läbirääkige TLS ühendatud socketi kaudu teenuse kavandatud hostinime ja tavapäraste sertifikaadikontrollidega. Üksnes CONNECT ei krüpteeri voogu. Tõelise HTTP API jaoks jääb HTTP-klient mugavamaks liideseks, sest see käsitleb ka HTTP-sõnumeid.