Penangan proxy HTTP Reactor Netty membuat terowongan CONNECT bahkan untuk tujuan HTTP biasa. Jika proxy yang dimaksud menerima penerusan HTTP/1.1 biasa, Spring WebClient dapat memakai konektor lain yang didukung.

Untuk Spring 6.2 dengan API klien Jetty 12.0.35 dan integrasi Jetty Reactive Streams yang kompatibel:

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 adalah kelas Spring. Kelola start dan stop klien Jetty yang disediakan melalui siklus hidup normal aplikasi.

Proxy HTTP/1.1 Jetty dapat meneruskan permintaan HTTP/1.1 biasa tanpa terowongan saat protokol tujuan dan klien-proxy cocok. Kebijakan requiresTunnel-nya memakai CONNECT untuk tujuan aman dan untuk jalur protokol yang tidak kompatibel.

Ini bukan cara menghapus CONNECT dari terowongan HTTPS biasa. Jaga skema tujuan tetap benar.

Gunakan addProxy pada API Jetty yang disebutkan. getProxies mengembalikan daftar yang tidak dapat diubah, jadi resep lama getProxies().add(...) bukan antarmuka mutasinya saat ini.

Untuk tujuan HTTP publik pada rute proxy publik yang diizinkan, daftar proxy HTTP menyediakan kandidat untuk host dan port proxy Jetty. Baca respons proxy yang sebenarnya saat membandingkan konektor. Autentikasi, kebijakan tujuan, dan tujuan yang tidak tersedia tetap terpisah dari pilihan antara HTTP yang diteruskan dan CONNECT.

Artikel terkait