Spring WebClient với Jetty: proxy HTTP thông thường không dùng CONNECT
Dùng trình kết nối Jetty của Spring với các giao thức HTTP/1.1 của máy khách và proxy tương ứng khi cần một yêu cầu HTTP chuyển tiếp thông thường.
Bộ xử lý proxy HTTP của Reactor Netty thiết lập một đường hầm CONNECT ngay cả với đích HTTP thông thường. Nếu proxy dự định chấp nhận chuyển tiếp HTTP/1.1 thông thường, Spring WebClient có thể dùng một trình kết nối được hỗ trợ khác.
Với Spring 6.2 cùng API máy khách của Jetty 12.0.35 và tích hợp Jetty Reactive Streams tương thích:
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 và JettyClientHttpConnector là các lớp của Spring. Quản lý việc khởi động và dừng máy khách Jetty được cung cấp thông qua vòng đời thông thường của ứng dụng.
Proxy HTTP/1.1 của Jetty có thể chuyển tiếp một yêu cầu HTTP/1.1 thông thường mà không cần đường hầm khi giao thức của đích và proxy máy khách khớp nhau. Chính sách requiresTunnel của nó dùng CONNECT cho các đích bảo mật và các đường dẫn giao thức không tương thích.
Đây không phải là cách loại bỏ CONNECT khỏi một đường hầm HTTPS thông thường. Giữ scheme của đích cho đúng.
Dùng addProxy trong API Jetty đã nêu. getProxies trả về một danh sách không thể sửa đổi, nên công thức cũ getProxies().add(...) không phải giao diện sửa đổi hiện tại của nó.
Với các đích HTTP công khai trên một tuyến proxy công khai được phép, danh sách proxy HTTP cung cấp các ứng viên cho host và port của proxy Jetty. Đọc phản hồi proxy thực tế khi so sánh các trình kết nối. Xác thực, chính sách đích và đích không khả dụng vẫn tách biệt khỏi việc chọn HTTP chuyển tiếp hay CONNECT.