Le gestionnaire de proxy HTTP de Reactor Netty établit un tunnel CONNECT même pour une destination HTTP simple. Si le proxy prévu accepte plutôt un transfert HTTP/1.1 ordinaire, Spring WebClient peut utiliser un autre connecteur pris en charge.

Pour Spring 6.2 avec l'API client de Jetty 12.0.35 et une intégration Jetty Reactive Streams compatible :

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 et JettyClientHttpConnector sont des classes Spring. Gérez le démarrage et l'arrêt du client Jetty fourni via le cycle de vie normal de l'application.

Le proxy HTTP/1.1 de Jetty peut transférer une requête HTTP/1.1 ordinaire sans tunnel lorsque les protocoles de la destination et du client-proxy correspondent. Sa politique requiresTunnel utilise CONNECT pour les destinations sécurisées et pour les chemins de protocole incompatibles.

Ce n'est pas un moyen de supprimer CONNECT d'un tunnel HTTPS ordinaire. Gardez le schéma de la destination correct.

Utilisez addProxy dans l'API Jetty indiquée. getProxies renvoie une liste non modifiable, donc l'ancienne recette getProxies().add(...) n'est pas son interface de mutation actuelle.

Pour les destinations HTTP publiques sur une route de proxy public autorisée, la liste de proxys HTTP fournit des candidats pour l'hôte et le port du proxy de Jetty. Lisez la réponse réelle du proxy lorsque vous comparez des connecteurs. L'authentification, la politique de destination et une destination indisponible restent distinctes du choix entre HTTP transféré et CONNECT.

Articles similaires