Der HTTP-Proxy-Handler von Reactor Netty baut selbst für ein einfaches HTTP-Ziel einen CONNECT-Tunnel auf. Wenn der vorgesehene Proxy stattdessen eine gewöhnliche HTTP/1.1-Weiterleitung akzeptiert, kann Spring WebClient einen anderen unterstützten Connector verwenden.

Für Spring 6.2 mit der Client-API von Jetty 12.0.35 und einer kompatiblen 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 und JettyClientHttpConnector sind Spring-Klassen. Verwalten Sie Start und Stopp des bereitgestellten Jetty-Clients über den normalen Lebenszyklus der Anwendung.

Der HTTP/1.1-Proxy von Jetty kann eine gewöhnliche HTTP/1.1-Anfrage ohne Tunnel weiterleiten, wenn Ziel- und Client-Proxy-Protokolle übereinstimmen. Seine requiresTunnel-Richtlinie verwendet CONNECT für sichere Ziele und für inkompatible Protokollpfade.

Dies ist kein Weg, CONNECT aus einem gewöhnlichen HTTPS-Tunnel zu entfernen. Halten Sie das Schema des Ziels korrekt.

Verwenden Sie addProxy in der genannten Jetty-API. getProxies gibt eine unveränderliche Liste zurück, daher ist das ältere Rezept getProxies().add(...) nicht ihre aktuelle Mutationsschnittstelle.

Für öffentliche HTTP-Ziele auf einer zulässigen öffentlichen Proxy-Route liefert die HTTP-Proxy-Liste Kandidaten für Host und Port des Jetty-Proxys. Lesen Sie die tatsächliche Proxy-Antwort, wenn Sie Connectoren vergleichen. Authentifizierung, Zielrichtlinie und ein nicht erreichbares Ziel bleiben getrennt von der Wahl zwischen weitergeleitetem HTTP und CONNECT.

Ähnliche Artikel