Spring WebClient กับ Jetty: การพร็อกซี HTTP แบบธรรมดาโดยไม่ใช้ CONNECT
ใช้ตัวเชื่อมต่อ Jetty ของ Spring กับโปรโตคอล HTTP/1.1 ของไคลเอนต์และพร็อกซีที่ตรงกัน เมื่อจำเป็นต้องส่งต่อคำขอ HTTP แบบธรรมดา
ตัวจัดการพร็อกซี 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