ตัวจัดการพร็อกซี HTTP ของ Reactor Netty สร้างอุโมงค์ CONNECT แม้กับปลายทาง HTTP ธรรมดา หากพร็อกซีที่ตั้งใจไว้ยอมรับการส่งต่อ HTTP/1.1 แบบธรรมดา Spring WebClient สามารถใช้ตัวเชื่อมต่ออื่นที่รองรับได้

สำหรับ Spring 6.2 กับ API ไคลเอนต์ของ Jetty 12.0.35 และการผสานรวม 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 และ JettyClientHttpConnector เป็นคลาสของ Spring จัดการการเริ่มและการหยุดไคลเอนต์ Jetty ที่ให้มาผ่านวงจรชีวิตปกติของแอปพลิเคชัน

พร็อกซี HTTP/1.1 ของ Jetty สามารถส่งต่อคำขอ HTTP/1.1 ธรรมดาโดยไม่มีอุโมงค์เมื่อโปรโตคอลของปลายทางและพร็อกซีไคลเอนต์ตรงกัน นโยบาย requiresTunnel ใช้ CONNECT สำหรับปลายทางที่ปลอดภัยและเส้นทางโปรโตคอลที่เข้ากันไม่ได้

นี่ไม่ใช่วิธีลบ CONNECT ออกจากอุโมงค์ HTTPS ธรรมดา รักษา scheme ของปลายทางให้ถูกต้อง

ใช้ addProxy ใน API ของ Jetty ที่ระบุไว้ getProxies ส่งคืนรายการที่แก้ไขไม่ได้ ดังนั้นสูตรเก่า getProxies().add(...) จึงไม่ใช่อินเทอร์เฟซการแก้ไขปัจจุบัน

สำหรับปลายทาง HTTP สาธารณะบนเส้นทางพร็อกซีสาธารณะที่อนุญาต รายการพร็อกซี HTTP ให้ผู้สมัครสำหรับโฮสต์และพอร์ตของพร็อกซี Jetty อ่านการตอบกลับของพร็อกซีจริงเมื่อเปรียบเทียบตัวเชื่อมต่อ การพิสูจน์ตัวตน นโยบายปลายทาง และปลายทางที่ไม่พร้อมใช้งานยังแยกจากการเลือกส่งต่อ HTTP หรือ CONNECT

บทความที่เกี่ยวข้อง