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.

Artigos relacionados