Yo'naltiruvchi proksi so'rov satri va sarlavhalarni o'qiydi, ularni uzatadi, so'ng select ichida POST tanasini kutadi. Mijoz uni allaqachon yuborgan. Ikkala tomon ham bir-birini kutayotganday ko'rinadi.

Python'ning BaseHTTPRequestHandler'ida sarlavhalarni o'qish rfile orqali o'tadi, bu buferlangan kirish oqimi. Bu oqim oldinga o'qishi va tanaga tegishli baytlarni ushlab turishi mumkin. Pastdagi socketni kutish faqat uning fayl deskriptori tayyormi, shuni so'raydi; Python oqimida allaqachon foydalanish mumkin bo'lgan ma'lumot bor-yo'qligini so'ramaydi.

Sarlavhalarni o'qigan buferni kuzatib boring

Tanani ham self.rfile orqali o'qing. Sarlavhalarni buferlangan oqim bilan tahlil qilgandan keyin self.connection.recv ga o'tmang. Aks holda kod o'sha oqim ushlab turgan baytlarni chetlab o'tib, boshqa hech qachon yuborilmaydigan ma'lumotni kutishi mumkin.

rfile'ning o'zini select ga berish select ni uning Python buferini tekshirishga majburlamaydi. Tayyorlik API'si obyektning fayl deskriptori orqali ishlaydi.

Bitta haqiqiy Content-Length bo'lgan va Transfer-Encoding bo'lmagan so'rov uchun e'lon qilingan bayt sonini aynan iste'mol qiling, kirishning erta tugashini va o'zingizning o'lcham hamda vaqt chegaralarini boshqaring. EOF gacha o'qimang: doimiy ulanishdan foydalanadigan mijoz so'rov tugagandan keyin ham ulanishni ochiq qoldirishi mumkin.

Ramkalashni proksining aniq qismiga aylantiring

Chunked so'rov tanalari chunked ramkalash yordamini talab qiladi. Ularni mavjud bo'lmagan Content-Length ni qidirib o'qib bo'lmaydi. Noaniq uzunlik metama'lumotlari qulay ko'ringan sarlavhani tanlash o'rniga belgilangan rad etish yo'lini talab qiladi.

Bloklovchi handler cheklangan o'qishlar bilan oqim interfeysidan foydalanishda davom etishi mumkin. Voqealarga asoslangan proksi parserning oldindan o'qishini tayyorlik bilan ishlashga birlashtirgan bufer modelini talab qiladi. Taymautni o'zgartirish bir socketning ikki mustaqil iste'molchisini yarashtirmaydi.

Bu tashxis kiruvchi baytlar qayerda saqlanishiga taalluqli. Proksi to'g'ri tanani iste'mol qilgandan keyin ham uni izchil HTTP ramkalashi bilan uzatishi kerak. Standart http.server handler mexanizmni tushunish uchun foydali joy, ammo u ishlab chiqarish uchun yo'naltiruvchi proksi implementatsiyasi emas.

O'xshash maqolalar