Spring WebClient med Jetty: vanlig HTTP-proxy uten CONNECT
Bruk Springs Jetty-kontakt med samsvarende HTTP/1.1-protokoller for klient og proxy når en vanlig videresendt HTTP-forespørsel er nødvendig.
Reactor Nettys HTTP-proxyhåndterer oppretter en CONNECT-tunnel selv for et vanlig HTTP-mål. Hvis den tiltenkte proxyen godtar vanlig HTTP/1.1-videresending i stedet, kan Spring WebClient bruke en annen støttet kontakt.
For Spring 6.2 med Jetty 12.0.35s klient-API og kompatibel Jetty Reactive Streams-integrasjon:
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 og JettyClientHttpConnector er Spring-klasser. Håndter oppstart og nedstenging av den medfølgende Jetty-klienten gjennom applikasjonens vanlige livssyklus.
Jetty sin HTTP/1.1-proxy kan videresende en vanlig HTTP/1.1-forespørsel uten tunnel når mål- og klientproxyprotokollene samsvarer. requiresTunnel-policyen bruker CONNECT for sikre mål og for inkompatible protokollveier.
Dette er ikke en måte å fjerne CONNECT fra en vanlig HTTPS-tunnel. Hold målets scheme riktig.
Bruk addProxy i den angitte Jetty-API-en. getProxies returnerer en liste som ikke kan endres, så den eldre oppskriften getProxies().add(...) er ikke dens nåværende endringsgrensesnitt.
For offentlige HTTP-mål på en tillatt offentlig proxy-rute gir HTTP-proxylisten kandidater for Jetty-proxyens vert og port. Les den faktiske proxyresponsen når du sammenligner kontakter. Autentisering, målpolicy og et utilgjengelig mål forblir atskilt fra å velge videresendt HTTP kontra CONNECT.