Spring WebClient met Jetty: gewone HTTP-proxying zonder CONNECT
Gebruik Springs Jetty-connector met overeenkomende HTTP/1.1-client- en proxyprotocollen wanneer een gewoon doorgestuurd HTTP-verzoek nodig is.
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.