Jetty ile Spring WebClient: CONNECT olmadan düz HTTP proxy'leme
Sıradan bir iletilen HTTP isteği gerektiğinde Spring'in Jetty bağlayıcısını eşleşen HTTP/1.1 istemci ve proxy protokolleriyle kullanın.
Reactor Netty'nin HTTP proxy işleyicisi sıradan bir HTTP hedefi için bile bir CONNECT tüneli kurar. Amaçlanan proxy sıradan HTTP/1.1 iletimini kabul ediyorsa, Spring WebClient desteklenen başka bir bağlayıcı kullanabilir.
Spring 6.2 ile Jetty 12.0.35'in istemci API'si ve uyumlu Jetty Reactive Streams entegrasyonu için:
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 ve JettyClientHttpConnector Spring sınıflarıdır. Sağlanan Jetty istemcisinin başlatılmasını ve kapatılmasını uygulamanın normal yaşam döngüsü üzerinden yönetin.
Jetty'nin HTTP/1.1 proxy'si, hedef ve istemci-proxy protokolleri eşleştiğinde sıradan bir HTTP/1.1 isteğini tünel olmadan iletebilir. requiresTunnel ilkesi güvenli hedefler ve uyumsuz protokol yolları için CONNECT kullanır.
Bu, sıradan bir HTTPS tünelinden CONNECT'i kaldırmanın bir yolu değildir. Hedefin scheme'ini doğru tutun.
Belirtilen Jetty API'sinde addProxy kullanın. getProxies değiştirilemez bir liste döndürür, bu nedenle eski getProxies().add(...) tarifi onun güncel değiştirme arayüzü değildir.
İzin verilen bir genel proxy yolundaki genel HTTP hedefleri için HTTP proxy listesi Jetty proxy'sinin ana bilgisayarı ve bağlantı noktası için adaylar sağlar. Bağlayıcıları karşılaştırırken gerçek proxy yanıtını okuyun. Kimlik doğrulama, hedef ilkesi ve kullanılamayan hedef, iletilen HTTP ile CONNECT arasında seçim yapmaktan ayrı kalır.