ফৰৱাৰ্ড প্ৰক্সিয়ে অনুৰোধ শাৰী আৰু হেডাৰ পঢ়ি, সেইবোৰ পঠিয়াই, তাৰ পিছত select ত POST বডিৰ বাবে অপেক্ষা কৰে। ক্লায়েণ্টে ইতিমধ্যে ইয়াক পঠিয়াইছে। দুয়োপক্ষই এজনে আনজনৰ বাবে অপেক্ষা কৰা যেন লাগে।

Python ৰ BaseHTTPRequestHandler ৰ সৈতে, হেডাৰ পঢ়া rfile ৰ জৰিয়তে যায়, যি এটা বাফাৰ কৰা ইনপুট ষ্ট্ৰিম। সেই ষ্ট্ৰিমে আগলৈ পঢ়িব পাৰে আৰু বডিৰ বাইট ধৰি ৰাখিব পাৰে। অন্তৰ্নিহিত ছকেটত অপেক্ষা কৰিলে কেৱল তাৰ ফাইল ডেস্ক্ৰিপ্টৰ সাজু আছেনে নাই সোধা হয়; Python ষ্ট্ৰিমত ইতিমধ্যে ব্যৱহাৰযোগ্য তথ্য আছে নে নাই সোধা নহয়।

হেডাৰ পঢ়া বাফাৰটো অনুসৰণ কৰক

বডিও self.rfile ৰ জৰিয়তে পঢ়ক। বাফাৰ কৰা ষ্ট্ৰিমেৰে হেডাৰ বিশ্লেষণ কৰাৰ পিছত self.connection.recv লৈ নাযাব। নহ'লে ক'ডে সেই ষ্ট্ৰিমত ৰখা বাইট এৰাই যাব পাৰে আৰু পুনৰ কেতিয়াও নপঠিওৱা তথ্যৰ বাবে অপেক্ষা কৰিব পাৰে।

rfile নিজেই select লৈ দিলে select এ তাৰ Python বাফাৰ পৰীক্ষা নকৰে। সাজুতা API বস্তুটোৰ ফাইল ডেস্ক্ৰিপ্টৰৰ জৰিয়তে কাম কৰে।

এটা বৈধ Content-Length থকা আৰু Transfer-Encoding নথকা অনুৰোধৰ বাবে, ঘোষিত বাইটৰ সংখ্যা ঠিক সিমানেই গ্ৰহণ কৰক, অকালত ইনপুট শেষ হোৱা আৰু আপোনাৰ আকাৰ তথা সময়ৰ সীমা চম্ভালি। EOF লৈকে নপঢ়িব: স্থায়ী সংযোগ ব্যৱহাৰ কৰা ক্লায়েণ্টে অনুৰোধ শেষ কৰাৰ পিছতো সংযোগ খোলা ৰাখিব পাৰে।

ফ্ৰেমিঙক প্ৰক্সিৰ স্পষ্ট অংশ কৰক

চাংক কৰা অনুৰোধ বডিৰ বাবে চাংক কৰা ফ্ৰেমিং সমৰ্থন লাগে। অনুপস্থিত Content-Length বিচাৰি সেইবোৰ পঢ়িব নোৱাৰি। অস্পষ্ট দৈৰ্ঘ্য মেটাডেটাৰ বাবে নিৰ্দিষ্ট প্ৰত্যাখ্যান পথ লাগে, সুবিধাজনক যেন লগা হেডাৰ বাছনি কৰাৰ পৰিৱৰ্তে।

ব্লকিং হেণ্ডলাৰে সীমাবদ্ধ পঢ়াৰ সৈতে তাৰ ষ্ট্ৰিম ইন্টাৰফেচ ব্যৱহাৰ কৰি থাকিব পাৰে। ঘটনা-চালিত প্ৰক্সিৰ বাবে এনে বাফাৰ আৰ্হি লাগে যি পাৰ্চাৰৰ আগলৈ পঢ়া আৰু সাজুতা চম্ভালা সংযুক্ত কৰে। টাইমআউট সলনি কৰিলে একে ছকেটৰ দুজন স্বতন্ত্ৰ গ্ৰাহক মিলাই নিদিয়ে।

এই নিৰ্ণয় নিৰ্দিষ্ট যে অন্তৰ্গত বাইট ক'ত ৰখা হয়। প্ৰক্সিয়ে সঠিক বডি গ্ৰহণ কৰাৰ পিছত, সেই বডি সূসংগত HTTP ফ্ৰেমিঙৰ সৈতে পঠিয়াব লাগে। মানক http.server হেণ্ডলাৰ কাৰ্য্যবিধি বুজাত উপযোগী স্থান, কিন্তু ই উৎপাদন ফৰৱাৰ্ড-প্ৰক্সি ৰূপায়ণ নহয়।

সম্পৰ্কিত প্ৰবন্ধ