Spring WebClient med Jetty: vanlig HTTP-proxying utan CONNECT
Använd Springs Jetty-anslutning med matchande HTTP/1.1-protokoll för klient och proxy när en vanlig vidarebefordrad HTTP-begäran behövs.
Reactor Nettys HTTP-proxyhanterare upprättar en CONNECT-tunnel även för ett vanligt HTTP-mål. Om den avsedda proxyn i stället accepterar vanlig HTTP/1.1-vidarebefordran kan Spring WebClient använda en annan anslutning som stöds.
För Spring 6.2 med Jetty 12.0.35:s klient-API och kompatibel Jetty Reactive Streams-integration:
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 och JettyClientHttpConnector är Spring-klasser. Hantera start och avstängning av den medföljande Jetty-klienten via applikationens vanliga livscykel.
Jettys HTTP/1.1-proxy kan vidarebefordra en vanlig HTTP/1.1-begäran utan tunnel när målets och klientproxyns protokoll matchar. Dess requiresTunnel-policy använder CONNECT för säkra mål och för inkompatibla protokollvägar.
Detta är inte ett sätt att ta bort CONNECT från en vanlig HTTPS-tunnel. Behåll målets scheme korrekt.
Använd addProxy i det angivna Jetty-API:et. getProxies returnerar en lista som inte kan ändras, så det äldre receptet getProxies().add(...) är inte dess nuvarande ändringsgränssnitt.
För offentliga HTTP-mål på en tillåten offentlig proxyväg tillhandahåller HTTP-proxylistan kandidater för Jetty-proxyns värd och port. Läs det faktiska proxy-svaret när du jämför anslutningar. Autentisering, målpolicy och ett otillgängligt mål förblir åtskilda från valet mellan vidarebefordrad HTTP och CONNECT.