Spring WebClient med Jetty: almindelig HTTP-proxy uden CONNECT
Brug Springs Jetty-connector med matchende HTTP/1.1-klient- og proxyprotokoller, når en almindelig videresendt HTTP-anmodning er påkrævet.
Reactor Netty HTTP-proxyhandler opretter en CONNECT-tunnel, selv for en almindelig HTTP-destination. Hvis den tilsigtede proxy i stedet accepterer almindelig HTTP/1.1-videresendelse, kan Spring WebClient bruge en anden understøttet connector.
For Spring 6.2 med Jetty 12.0.35 klient-API og 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 og JettyClientHttpConnector er Spring-klasser. Administrer opstart og nedlukning af den leverede Jetty-klient via applikationens normale livscyklus.
Jettys HTTP/1.1-proxy kan videresende en almindelig HTTP/1.1-anmodning uden tunnel, når destinationens og klient-proxyens protokoller matcher. Dens requiresTunnel-politik bruger CONNECT til sikre destinationer og til inkompatible protokolveje.
Dette er ikke en måde at fjerne CONNECT fra en almindelig HTTPS-tunnel. Hold destinationens scheme korrekt.
Brug addProxy i den angivne Jetty-API. getProxies returnerer en uændrelig liste, så den ældre opskrift getProxies().add(...) er ikke dens nuværende mutationsgrænseflade.
For offentlige HTTP-destinationer på en tilladt offentlig proxy-rute leverer HTTP-proxylisten kandidater til Jettys proxy-host og -port. Læs det faktiske proxy-svar, når du sammenligner connectors. Godkendelse, destinationspolitik og en utilgængelig destination forbliver adskilt fra valget mellem videresendt HTTP og CONNECT.