En eegene TCP-Protokoll kann duerch en HTTP-Proxy reesen, wann dee Proxy CONNECT zum Zil erlaabt. D'Applikatiounsprotokoll muss net HTTP ginn: HTTP baut den Tunnel op, duerno tauscht d'Applikatioun seng eege Bytes dobannen aus.

OpenJDK 25 bitt en HTTP-Proxy-Wee an Socket(Proxy). Seng Implementatioun mécht den CONNECT-Austausch a gëtt en ugeschlossene Socket zréck, deen d'Applikatioun benotze kann.

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();
}

Dëse Fragment benotzt Klassen aus java.net an java.io. Ersetzt déi zwou Endpunkten a maacht den Protokoll-Austausch, ier Dir den try-Block verloosst. Fir en erlaabten ëffentlechen TCP-Zil wielt HTTP-Kandidaten aus der HTTP-Proxy-Lëscht eréischt nodeems Dir d'CONNECT-Berechtegung fir de Port vun deem Zil gepréift hutt. D'Proxy-Adress ass där Plaz wou Java sech als éischt verbënnt; d'Adress, déi un connect iwwergi gëtt, identifizéiert de Service, deen de Proxy erreeche soll.

Déi ongeléist Zil behält hire Hostname fir d'CONNECT-Ufro vun dëser Implementatioun. Eng opgeléist InetSocketAddress gëtt dodeem géintiwwer hir opgeléist IP-Adress un déi Ufro. Dee Ënnerscheed ass wichteg, wann de Proxy den Numm vum Service opléise muss oder eng Richtlinn op Basis vum Hostname muss uwenden.

Wat eng erfollegräich Verbindung Iech léisst

Déi entstane Stréim droen d'Donnéeë vum getunnelte Service. Si weisen keng separat HTTP-Antwert, déi Är Applikatioun liesen an ewechgeheiere sollt. En zweeten CONNECT-Austausch géif HTTP-Text un de Service schécken, nodeems den JDK den Tunnel schonn opgebaut huet.

D'Beispill setzt en Verbindungszäitlimit an e Socket-Leszäitlimit; dat sinn getrennt Kontrollen, net eng eenzeg global Frist fir d'Applikatiounssessioun.

D'CONNECT-Berechtegung gehéiert weiderhin dem Proxy. En Endpunkt, deen gewéinlech Webufroe viruleet, kann de Port vum Service ofleenen oder eng Authentifikatioun verlaangen, ier en Tunnel opgemaach gëtt. Halt déi Feeler getrennt vun engem Server, deen den Tunnel akzeptéiert, awer duerno Är Applikatiounsprotokoll ofleent.

Wann dee Protokoll TLS brauch, verhandelt TLS duerch den ugeschlossene Socket mam virgesiwwenen Hostname vum Service an de normale Zertifikatspréifungen. CONNECT eleng verschlësselt de Stroum net. Fir eng richteg HTTP-API bleift en HTTP-Client déi bequemlech Interface, well en och HTTP-Noriichten behandelt.

Ähnlech Artikelen