In oanpast TCP-protokol kin troch in HTTP-proxy reizgje as dy proxy CONNECT nei de bestimming tastiet. It applikaasjeprotokol hoecht gjin HTTP te wurden: HTTP set it tunnel oan, dêrnei wikselet de applikaasje syn eigen bytes der yn út.

OpenJDK 25 biedt in HTTP-proxy-paad yn Socket(Proxy). De ymplemintaasje dêrfan docht de CONNECT-útwikseling en jout in ferbûn socket werom foar de applikaasje.

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

Dit fragmint brûkt klassen út java.net en java.io. Ferfange de beide einpunten en doch de protokolútwikseling foardat jo it try-blok ferlitte. Kies foar in tastien iepenbier TCP-doel HTTP-kandidaten út de HTTP-proxylist pas neidat jo de CONNECT-tastimming foar de poarte fan dat doel kontrolearre hawwe. It proxy-adres is dêr't Java earst ferbynt; it adres dat oan connect jûn wurdt, identifisearret de tsjinst dy't it proxy berikke moat.

De net-oploste bestimming behâldt har hostnamme foar it CONNECT-fersyk fan dizze ymplemintaasje. In oploste InetSocketAddress jout ynstee dêrfan syn oploste IP-adres oan dat fersyk. Dat ûnderskied is wichtich as it proxy de tsjinstnamme oplosse moat of belied tapasse moat op grûn fan hostnamme.

Wat in slagge ferbining jo litte lit

De resultearjende streams drage de gegevens fan de tunneltsjinst. Se litte gjin apart HTTP-antwurd sjen dat jo applikaasje lêze en fuortsmite moat. In twadde CONNECT-útwikseling taheakje soe HTTP-tekst nei de tsjinst stjoere neidat de JDK it tunnel al oanmakke hat.

It foarbyld jout in ferbiningstimeout en in socket-lêstimeout; dat binne aparte kontrôles, net ien algemiene deadline foar de applikaasjesesje.

CONNECT-tastimming bliuwt by it proxy. In einpunt dat gewoane webfersiken trochstjoert, kin de poarte fan de tsjinst wegerje of autentikaasje easkje foardat in tunnel iepene wurdt. Hâld dy mislearrings apart fan in tsjinner dy't it tunnel akseptearret mar letter jo applikaasjeprotokol wegeret.

As dat protokol TLS nedich hat, ûnderhannelje dan TLS troch it ferbûne socket mei de bedoelde hostnamme fan de tsjinst en normale sertifikaatkontrôles. CONNECT allinnich fersiferet de stream net. Foar in echte HTTP-API bliuwt in HTTP-klant de handiger ynterface, om't dy ek HTTP-berjochten behannelet.

Relatearre artikelen