Spring WebClient con Jetty: proxy HTTP simple sen CONNECT
Usa o conector Jetty de Spring con protocolos de cliente e proxy HTTP/1.1 coincidentes cando se require unha solicitude HTTP reenviada ordinaria.
O xestor de proxy HTTP de Reactor Netty establece un túnel CONNECT mesmo para un destino HTTP simple. Se o proxy previsto acepta no seu lugar un reenvío HTTP/1.1 ordinario, Spring WebClient pode usar outro conector compatible.
Para Spring 6.2 coa API de cliente de Jetty 12.0.35 e unha integración compatible de Jetty Reactive Streams:
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 e JettyClientHttpConnector son clases de Spring. Xestiona o arranque e a parada do cliente Jetty subministrado mediante o ciclo de vida normal da aplicación.
O proxy HTTP/1.1 de Jetty pode reenviar unha solicitude HTTP/1.1 ordinaria sen túnel cando coinciden os protocolos de destino e de cliente-proxy. A súa política requiresTunnel usa CONNECT para destinos seguros e para rutas de protocolo incompatibles.
Isto non é unha forma de eliminar CONNECT dun túnel HTTPS ordinario. Mantén correcto o esquema do destino.
Usa addProxy na API de Jetty indicada. getProxies devolve unha lista non modificable, así que a receita anterior getProxies().add(...) non é a súa interface de mutación actual.
Para destinos HTTP públicos nunha ruta de proxy público permitida, a lista de proxies HTTP ofrece candidatos para o host e o porto do proxy de Jetty. Le a resposta real do proxy ao comparar conectores. A autenticación, a política de destino e un destino non dispoñible seguen sendo independentes de escoller HTTP reenviado ou CONNECT.