Spring WebClient با Jetty: پروکسی ساده HTTP بدون CONNECT
از اتصالدهنده Jetty اسپرینگ با پروتکلهای کلاینت و پروکسی HTTP/1.1 منطبق استفاده کنید هنگامی که یک درخواست HTTP ارسالشده معمولی لازم است.
مدیر پروکسی HTTP در Reactor Netty حتی برای یک مقصد ساده HTTP تونل CONNECT ایجاد میکند. اگر پروکسی موردنظر بهجای آن ارسال معمولی 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 کلاسهای اسپرینگ هستند. راهاندازی و توقف کلاینت Jetty ارائهشده را از طریق چرخه عمر عادی برنامه مدیریت کنید.
پروکسی HTTP/1.1 در Jetty میتواند یک درخواست معمولی HTTP/1.1 را بدون تونل ارسال کند وقتی پروتکلهای مقصد و کلاینت-پروکسی منطبق باشند. سیاست requiresTunnel آن برای مقصدهای امن و مسیرهای پروتکل ناسازگار از CONNECT استفاده میکند.
این راهی برای حذف CONNECT از یک تونل معمولی HTTPS نیست. طرحواره مقصد را درست نگه دارید.
از addProxy در API ذکرشده Jetty استفاده کنید. getProxies فهرستی غیرقابلتغییر برمیگرداند، بنابراین دستور قدیمی getProxies().add(...) رابط تغییر فعلی آن نیست.
برای مقصدهای عمومی HTTP در مسیر پروکسی عمومی مجاز، فهرست پروکسی HTTP نامزدهایی برای میزبان و پورت پروکسی Jetty فراهم میکند. هنگام مقایسه اتصالدهندهها پاسخ واقعی پروکسی را بخوانید. احراز هویت، سیاست مقصد و مقصد در دسترس نبودن جدا از انتخاب HTTP ارسالشده یا CONNECT باقی میمانند.