Node.js CONNECT হ্যান্ডলারগুলিকে head বাফার সংরক্ষণ করতে হবে
HTTP থেকে টানেলে সংযোগের সীমায় Node-এর CONNECT সকেট এবং head বাফার পরিচালনা করুন, হেডারগুলির পরে ইতিমধ্যে পড়া বাইটগুলি সংরক্ষণ করে।
একটি Node HTTP সার্ভার তার request callback-এর মাধ্যমে একটি সাধারণ প্রক্সি অনুরোধ পরিচালনা করে। CONNECT অন্য পথ নেয়: সার্ভার অনুরোধটি, ক্লায়েন্ট সকেট এবং একটি head বাফারসহ connect ইভেন্ট নির্গত করে।
সেই ইভেন্টটি HTTP পার্সিং এবং একটি টানেলের মধ্যে হস্তান্তর। টানেলকৃত ট্র্যাফিকের জন্য ব্যবহার চালিয়ে যাওয়ার মতো কোনো সাধারণ ServerResponse অবজেক্ট নেই।
| আর্গুমেন্ট | এটি কী বহন করে |
|---|---|
req | CONNECT অনুরোধ, তার গন্তব্য কর্তৃত্ব এবং হেডারসহ |
clientSocket | ক্লায়েন্টের দিকে ফিরে যাওয়া সংযোগ |
head | Node ইতিমধ্যে HTTP হেডারের পরে পড়া টানেল ডেটা, সম্ভবত খালি |
বাইট রিলে করার আগে HTTP সিদ্ধান্ত শেষ করুন
অনুরোধ করা হোস্ট এবং পোর্ট যাচাই করুন, প্রক্সির অ্যাক্সেস ও প্রমাণীকরণ নীতি প্রয়োগ করুন এবং আপস্ট্রিম সংযোগ স্থাপন করুন। CONNECT service.example:443-এর মতো একটি কর্তৃত্ব চিহ্নিত করে; প্রতিটি কোলনে অন্ধভাবে বিভক্ত করার বদলে IPv6 কর্তৃত্ব মাথায় রেখে সেই রূপটি পার্স করুন।
টানেল গৃহীত হলে, সফল HTTP প্রতিক্রিয়া এবং তার সমাপ্তি নির্দেশক খালি লাইন পাঠান। তারপর ক্লায়েন্ট সকেট থেকে পরবর্তী বাইট নিয়ে এগোনোর আগে যেকোনো head বাইট আপস্ট্রিমে পাঠান। নতুন ডেটা লিসেনার সংযুক্ত করে ইতিমধ্যে হ্যান্ডলারের কাছে আলাদাভাবে পৌঁছে দেওয়া বাফার পুনরুদ্ধার করা যায় না।
Node-এর অফিসিয়াল টানেলিং উদাহরণ দুটি স্ট্রিম দিক সংযুক্ত করার আগে serverSocket.write(head) দিয়ে সেই হস্তান্তর সম্পাদন করে। এর ছোট উদাহরণটি রূপান্তরটি দেখায়; একটি স্থাপিত প্রক্সির সীমিত সংযোগ প্রচেষ্টা, অ্যাক্সেস নিয়ন্ত্রণ এবং জীবনচক্র পরিচালনাও প্রয়োজন।
সফলতার পরে, বাইটগুলি পরিষেবা প্রোটোকলের অন্তর্গত
একটি সফল CONNECT প্রতিক্রিয়া সংযোগটিকে একটি বাইট স্ট্রিমে পরিবর্তন করে। লক্ষ্য যদি HTTPS সাইট হয়, তার TLS বিনিময় সেই স্ট্রিমের ভিতরে চলে। কেবল টানেল করা প্রক্সিকে প্রতিস্থাপন ওয়েবসাইট সার্টিফিকেট ইস্যু করতে বাধ্য করে না।
CONNECT গ্রহণের আগে একটি HTTP ত্রুটি কেন প্রত্যাখ্যান করা হয়েছে তা ব্যাখ্যা করতে পারে। গ্রহণের পরে স্ট্রিমে HTTP 500 লেখা টানেল প্রোটোকলে বাইট প্রবেশ করাবে। পরিবর্তে পরবর্তী ব্যর্থতায় উপযুক্ত সংযোগগুলি শেষ বা ধ্বংস করুন।
উভয় দিক ব্যাকপ্রেশার-সচেতন স্ট্রিম পরিচালনা-এর সাথে সংযুক্ত করুন, এবং end, error ও close ইভেন্টগুলি কীভাবে সমকক্ষকে সমাপ্ত করে তা নির্ধারণ করুন। প্রাথমিক head বাফারকে সেই একই মালিকানা মডেলের অংশ হিসেবে সংরক্ষণ করুন; এটি অ্যাপ্লিকেশন ডেটা, বাদ দেওয়ার মতো অতিরিক্ত HTTP হেডার নয়।