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.

Relaterade artiklar