De HTTP-proxyhandler van Reactor Netty maakt een CONNECT-tunnel zelfs voor een gewoon HTTP-doel. Als de bedoelde proxy in plaats daarvan gewone HTTP/1.1-doorsturing accepteert, kan Spring WebClient een andere ondersteunde connector gebruiken.

Voor Spring 6.2 met de client-API van Jetty 12.0.35 en een compatibele Jetty Reactive Streams-integratie:

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 en JettyClientHttpConnector zijn Spring-klassen. Beheer het starten en stoppen van de meegeleverde Jetty-client via de normale levenscyclus van de applicatie.

De HTTP/1.1-proxy van Jetty kan een gewoon HTTP/1.1-verzoek zonder tunnel doorsturen wanneer de protocollen van doel en clientproxy overeenkomen. Het requiresTunnel-beleid gebruikt CONNECT voor beveiligde doelen en voor incompatibele protocolpaden.

Dit is geen manier om CONNECT uit een gewone HTTPS-tunnel te verwijderen. Houd het schema van het doel correct.

Gebruik addProxy in de genoemde Jetty-API. getProxies retourneert een niet-wijzigbare lijst, dus het oudere recept getProxies().add(...) is niet de huidige mutatie-interface.

Voor openbare HTTP-doelen op een toegestane openbare proxyroute levert de HTTP-proxylijst kandidaten voor de host en poort van de Jetty-proxy. Lees de werkelijke proxyrespons bij het vergelijken van connectors. Authenticatie, doelbeleid en een niet-beschikbaar doel blijven losstaan van de keuze voor doorgestuurd HTTP of CONNECT.

Gerelateerde artikelen