La antaŭa prokurilo legas la petlinion kaj kapliniojn, plusendas ilin, kaj poste atendas en select POST-korpon. La kliento jam sendis ĝin. Ambaŭ flankoj ŝajnas atendi unu la alian.

Ĉe Python BaseHTTPRequestHandler, la legado de kaplinioj iras tra rfile, bufrita eniga fluo. Tiu fluo povas legi antaŭen kaj teni bitokojn apartenantajn al la korpo. Atendi ĉe la suba soketo nur demandas ĉu ĝia dosierpriskribilo pretas; ĝi ne demandas ĉu la Python-fluo jam enhavas uzeblajn datumojn.

Sekvu la bufron, kiu legis la kapliniojn

Legu la korpon ankaŭ tra self.rfile. Ne ŝaltu al self.connection.recv post kiam vi analizis la kapliniojn per la bufrita fluo. Alie la kodo povas preterpasi bitokojn jam tenatajn de tiu fluo kaj atendi datumojn, kiuj neniam estos denove senditaj.

Transdoni rfile mem al select ne igas select inspekti ĝian Python-bufron. La preteca API funkcias tra la dosierpriskribilo de la objekto.

Por peto kun unu valida Content-Length kaj sen Transfer-Encoding, konsumu precize la deklaritajn bitokojn, traktante antaŭtempan finon de enigo kaj viajn grandajn kaj tempajn limojn. Ne legu ĝis EOF: kliento uzanta daŭran konekton povas lasi la konekton malferma post fini la peton.

Faru kadrigon eksplicita parto de la prokurilo

Fragmentitaj petkorpoj bezonas subtenon de fragmenta kadrigo. Ili ne povas esti legitaj serĉante forestantan Content-Length. Malklaraj longecaj metadatumoj bezonas difinitan malakceptan vojon, anstataŭ elekti tiun kaplinion, kiu ŝajnas oportuna.

Blokanta traktilo povas daŭre uzi sian fluinterfacon kun limigitaj legadoj. Event-pelata prokurilo bezonas bufran modelon, kiu integras la antaŭlegadon de la analizilo kun pretectraktado. Ŝanĝi tempolimon ne akordigos du sendependajn konsumantojn de la sama soketo.

Ĉi tiu diagnozo specifas, kie la envenantaj bitokoj estas tenataj. Post kiam la prokurilo konsumis la ĝustan korpon, ĝi ankoraŭ devas plusendi tiun korpon kun konsekvenca HTTP-kadrigo. La norma http.server-traktilo estas utila loko por kompreni la mekanismon, sed ĝi ne estas produkta efektivigo de antaŭa prokurilo.

Rilataj artikoloj