Spring WebClient s Jetty: obyčajné HTTP proxovanie bez CONNECT
Použite konektor Jetty zo Springu so zladenými protokolmi HTTP/1.1 klienta a proxy, keď je potrebná obyčajná preposielaná HTTP požiadavka.
Spracovateľ HTTP proxy v Reactor Netty vytvára tunel CONNECT aj pre obyčajný HTTP cieľ. Ak zamýšľaná proxy akceptuje obyčajné preposielanie HTTP/1.1, Spring WebClient môže použiť iný podporovaný konektor.
Pre Spring 6.2 s klientskym API Jetty 12.0.35 a kompatibilnou integráciou Jetty Reactive Streams:
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 a JettyClientHttpConnector sú triedy Springu. Spravujte spúšťanie a zastavenie poskytnutého klienta Jetty cez bežný životný cyklus aplikácie.
HTTP/1.1 proxy v Jetty môže preposlať obyčajnú HTTP/1.1 požiadavku bez tunela, keď sa protokoly cieľa a klientskej proxy zhodujú. Jej politika requiresTunnel používa CONNECT pre zabezpečené ciele a nekompatibilné cesty protokolu.
Toto nie je spôsob, ako odstrániť CONNECT z obyčajného tunela HTTPS. Zachovajte správnu schému cieľa.
V uvedenom API Jetty použite addProxy. getProxies vracia nemenný zoznam, takže starší recept getProxies().add(...) nie je jeho aktuálne rozhranie na zmenu.
Pre verejné HTTP ciele na povolenej verejnej proxy trase zoznam HTTP proxy poskytuje kandidátov pre hostiteľa a port proxy Jetty. Pri porovnávaní konektorov čítajte skutočnú odpoveď proxy. Autentifikácia, politika cieľa a nedostupný cieľ zostávajú oddelené od voľby preposielaného HTTP alebo CONNECT.