Il gestore proxy HTTP di Reactor Netty stabilisce un tunnel CONNECT anche per una destinazione HTTP semplice. Se il proxy previsto accetta invece un normale inoltro HTTP/1.1, Spring WebClient può usare un altro connettore supportato.

Per Spring 6.2 con l'API client di Jetty 12.0.35 e un'integrazione Jetty Reactive Streams compatibile:

var jetty = new org.eclipse.jetty.client.HttpClient(
    new org.eclipse.jetty.client.transport.HttpClientTransportOverHTTP());
jetty.getProxyConfiguration().addProxy(
    new org.eclipse.jetty.client.HttpProxy("proxy.example", 8080));

var client = WebClient.builder()
    .clientConnector(new JettyClientHttpConnector(jetty))
    .build();

WebClient e JettyClientHttpConnector sono classi Spring. Gestisci l'avvio e l'arresto del client Jetty fornito tramite il normale ciclo di vita dell'applicazione.

Il proxy HTTP/1.1 di Jetty può inoltrare una normale richiesta HTTP/1.1 senza tunnel quando i protocolli di destinazione e client-proxy coincidono. La sua politica requiresTunnel usa CONNECT per destinazioni sicure e per percorsi di protocollo incompatibili.

Questo non è un modo per rimuovere CONNECT da un normale tunnel HTTPS. Mantieni corretto lo schema della destinazione.

Usa addProxy nell'API Jetty indicata. getProxies restituisce un elenco non modificabile, quindi la vecchia ricetta getProxies().add(...) non è la sua interfaccia di modifica attuale.

Per destinazioni HTTP pubbliche su una rotta proxy pubblica consentita, l'elenco proxy HTTP fornisce candidati per host e porta del proxy di Jetty. Leggi la risposta reale del proxy quando confronti i connettori. Autenticazione, politica di destinazione e una destinazione non disponibile restano separati dalla scelta tra HTTP inoltrato e CONNECT.

Articoli correlati