Spring WebClient dengan Jetty: Proksi HTTP Biasa Tanpa CONNECT
Gunakan penyambung Jetty Spring dengan protokol klien dan proksi HTTP/1.1 yang sepadan apabila permintaan HTTP yang dimajukan biasa diperlukan.
Pengendali proksi HTTP Reactor Netty menubuhkan terowong CONNECT walaupun untuk destinasi HTTP biasa. Jika proksi yang dimaksudkan menerima pemajuan HTTP/1.1 biasa, Spring WebClient boleh menggunakan penyambung lain yang disokong.
Untuk Spring 6.2 dengan API klien Jetty 12.0.35 dan integrasi Jetty Reactive Streams yang serasi:
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 dan JettyClientHttpConnector ialah kelas Spring. Uruskan permulaan dan penutupan klien Jetty yang dibekalkan melalui kitaran hayat biasa aplikasi.
Proksi HTTP/1.1 Jetty boleh memajukan permintaan HTTP/1.1 biasa tanpa terowong apabila protokol destinasi dan proksi klien sepadan. Dasar requiresTunnelnya menggunakan CONNECT untuk destinasi selamat dan laluan protokol yang tidak serasi.
Ini bukan cara untuk membuang CONNECT daripada terowong HTTPS biasa. Kekalkan skema destinasi dengan betul.
Gunakan addProxy dalam API Jetty yang dinyatakan. getProxies mengembalikan senarai yang tidak boleh diubah, jadi resipi lama getProxies().add(...) bukan antara muka pengubahsuaian semasanya.
Untuk destinasi HTTP awam pada laluan proksi awam yang dibenarkan, senarai proksi HTTP membekalkan calon untuk hos dan port proksi Jetty. Baca respons proksi sebenar semasa membandingkan penyambung. Pengesahan, dasar destinasi dan destinasi yang tidak tersedia kekal berasingan daripada memilih HTTP dimajukan berbanding CONNECT.