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 רגילה. שמרו על סכימת היעד נכונה.
השתמשו ב-addProxy ב-API של Jetty המוזכר. getProxies מחזיר רשימה שאינה ניתנת לשינוי, ולכן המתכון הישן getProxies().add(...) אינו ממשק השינוי הנוכחי שלו.
עבור יעדי HTTP ציבוריים בנתיב פרוקסי ציבורי מורשה, רשימת פרוקסי HTTP מספקת מועמדים עבור מארח ויציאת הפרוקסי של Jetty. קראו את תגובת הפרוקסי בפועל בעת השוואת מחברים. אימות, מדיניות יעד ויעד שאינו זמין נשארים נפרדים מבחירה בין HTTP מועבר ל-CONNECT.