Badan POST proksi HTTP Python boleh dibufer dalam rfile
Baca permintaan proksi HTTP Python melalui input terbuffer pengendali dan bukannya menunggu bait yang sudah meninggalkan penimbal soket.
Proksi hadapan membaca baris permintaan dan pengepala, memajukannya, kemudian menunggu dalam select untuk badan POST. Klien telah menghantarnya. Kedua-dua pihak kelihatan saling menunggu.
Dengan BaseHTTPRequestHandler Python, pembacaan pengepala melalui rfile, aliran input terbuffer. Aliran itu boleh membaca awal dan menahan bait milik badan. Menunggu pada soket asas hanya bertanya sama ada deskriptor failnya sedia; ia tidak bertanya sama ada aliran Python sudah mengandungi data yang boleh digunakan.
Ikut penimbal yang membaca pengepala
Baca badan melalui self.rfile juga. Jangan beralih kepada self.connection.recv selepas menghurai pengepala dengan aliran terbuffer. Jika tidak, kod boleh melangkau bait yang sudah ditahan aliran itu dan menunggu data yang tidak akan dihantar lagi.
Menyerahkan rfile sendiri kepada select tidak menyebabkan select memeriksa penimbal Pythonnya. API kesediaan berfungsi melalui deskriptor fail objek.
Untuk permintaan dengan satu Content-Length yang sah dan tiada Transfer-Encoding, guna tepat bilangan bait yang diisytiharkan, sambil mengendalikan penghujung input yang awal serta had saiz dan masa anda. Jangan baca sehingga EOF: klien yang menggunakan sambungan berterusan mungkin membiarkan sambungan terbuka selepas menamatkan permintaan.
Jadikan pembingkaian bahagian eksplisit proksi
Badan permintaan berketul memerlukan sokongan pembingkaian berketul. Ia tidak boleh dibaca dengan mencari Content-Length yang tidak ada. Metadata panjang yang kabur memerlukan laluan penolakan yang ditakrifkan, bukan memilih pengepala yang kelihatan mudah.
Pengendali penyekat boleh terus menggunakan antara muka alirannya dengan bacaan terbatas. Proksi dipacu peristiwa memerlukan model penimbal yang menyepadukan bacaan awal penghurai dengan pengendalian kesediaan. Menukar tamat masa tidak akan mendamaikan dua pengguna bebas bagi soket yang sama.
Diagnosis ini khusus tentang di mana bait masuk ditahan. Setelah proksi menggunakan badan yang betul, ia masih perlu memajukan badan itu dengan pembingkaian HTTP yang konsisten. Pengendali http.server standard ialah tempat berguna untuk memahami mekanisme, tetapi ia bukan pelaksanaan proksi hadapan untuk pengeluaran.