Spring WebClient com Jetty: proxy HTTP simples sem CONNECT
Use o conector Jetty do Spring com protocolos HTTP/1.1 de cliente e proxy compatíveis quando for necessário um pedido HTTP encaminhado comum.
O manipulador de proxy HTTP do Reactor Netty estabelece um túnel CONNECT mesmo para um destino HTTP simples. Se o proxy pretendido aceitar encaminhamento HTTP/1.1 comum, o Spring WebClient pode usar outro conector suportado.
Para Spring 6.2 com a API de cliente do Jetty 12.0.35 e integração Jetty Reactive Streams compatível:
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 são classes do Spring. Gira o arranque e o encerramento do cliente Jetty fornecido através do ciclo de vida normal da aplicação.
O proxy HTTP/1.1 do Jetty pode encaminhar um pedido HTTP/1.1 comum sem túnel quando os protocolos do destino e do proxy de cliente coincidem. A sua política requiresTunnel usa CONNECT para destinos seguros e para caminhos de protocolo incompatíveis.
Isto não é uma forma de remover CONNECT de um túnel HTTPS comum. Mantenha o esquema do destino correto.
Use addProxy na API Jetty indicada. getProxies devolve uma lista não modificável, pelo que a receita antiga getProxies().add(...) não é a sua interface atual de modificação.
Para destinos HTTP públicos numa rota de proxy pública permitida, a lista de proxies HTTP fornece candidatos para o host e a porta do proxy Jetty. Leia a resposta real do proxy ao comparar conectores. Autenticação, política de destino e um destino indisponível permanecem separados da escolha entre HTTP encaminhado e CONNECT.