Spring WebClient مع Jetty: تمرير HTTP العادي دون CONNECT
استخدم موصل Jetty من Spring مع بروتوكولات العميل والوكيل HTTP/1.1 المتوافقة عندما يلزم تمرير طلب HTTP عادي.
ينشئ معالج وكيل HTTP في Reactor Netty نفق CONNECT حتى لوجهة HTTP عادية. وإذا كان الوكيل المقصود يقبل بدلاً من ذلك تمرير HTTP/1.1 العادي، فيمكن لـ Spring WebClient استخدام موصل آخر مدعوم.
بالنسبة إلى Spring 6.2 مع واجهة عميل 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 في واجهة Jetty المذكورة. تعيد getProxies قائمة غير قابلة للتعديل، لذا فإن وصفة getProxies().add(...) الأقدم ليست واجهة التعديل الحالية.
لأهداف HTTP العامة على مسار وكيل عام مسموح، توفر قائمة وكلاء HTTP مرشحين لمضيف ومنفذ وكيل Jetty. اقرأ استجابة الوكيل الفعلية عند مقارنة الموصلات. تبقى المصادقة وسياسة الوجهة والهدف غير المتاح منفصلة عن اختيار تمرير HTTP أو CONNECT.