Jetty সহ Spring WebClient: CONNECT ছাড়াই সাধারণ HTTP প্রক্সি
সাধারণ ফরোয়ার্ডেড HTTP অনুরোধ প্রয়োজন হলে Spring-এর Jetty কানেক্টর মিলে যাওয়া HTTP/1.1 ক্লায়েন্ট ও প্রক্সি প্রোটোকলসহ ব্যবহার করুন।
Reactor Netty-র HTTP প্রক্সি হ্যান্ডলার সাধারণ HTTP গন্তব্যের জন্যও একটি CONNECT টানেল স্থাপন করে। যদি উদ্দিষ্ট প্রক্সি এর বদলে সাধারণ HTTP/1.1 ফরোয়ার্ডিং গ্রহণ করে, তবে Spring WebClient অন্য একটি সমর্থিত কানেক্টর ব্যবহার করতে পারে।
Spring 6.2-এর জন্য Jetty 12.0.35-এর ক্লায়েন্ট API এবং সামঞ্জস্যপূর্ণ 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 ক্লায়েন্টের স্টার্টআপ ও শাটডাউন অ্যাপ্লিকেশনের স্বাভাবিক লাইফসাইকেলের মাধ্যমে পরিচালনা করুন।
Jetty-র HTTP/1.1 প্রক্সি টানেল ছাড়াই একটি সাধারণ HTTP/1.1 অনুরোধ ফরোয়ার্ড করতে পারে, যখন টার্গেট ও ক্লায়েন্ট-প্রক্সি প্রোটোকল মেলে। এর requiresTunnel নীতি নিরাপদ টার্গেট এবং অসামঞ্জস্যপূর্ণ প্রোটোকল পথের জন্য CONNECT ব্যবহার করে।
এটি সাধারণ HTTPS টানেল থেকে CONNECT সরানোর উপায় নয়। গন্তব্যের স্কিম সঠিক রাখুন।
উল্লিখিত Jetty API-তে addProxy ব্যবহার করুন। getProxies একটি অপরিবর্তনযোগ্য তালিকা ফেরত দেয়, তাই পুরোনো getProxies().add(...) রেসিপি এর বর্তমান মিউটেশন ইন্টারফেস নয়।
অনুমোদিত পাবলিক-প্রক্সি পথে পাবলিক HTTP টার্গেটের জন্য HTTP প্রক্সি তালিকা Jetty-র প্রক্সি হোস্ট ও পোর্টের প্রার্থী সরবরাহ করে। কানেক্টর তুলনা করার সময় প্রকৃত প্রক্সি প্রতিক্রিয়া পড়ুন। অথেন্টিকেশন, গন্তব্য নীতি এবং অনুপলব্ধ টার্গেট ফরোয়ার্ডেড HTTP বনাম CONNECT বাছাই থেকে আলাদা থাকে।