Il-proxy forward jaqra l-linja tat-talba u l-headers, jgħaddihom, imbagħad jistenna f'select għal korp POST. Il-klijent diġà bagħtu. Iż-żewġ naħat jidhru qed jistennew lil xulxin.

B'BaseHTTPRequestHandler ta' Python, il-qari tal-headers jgħaddi minn rfile, stream ta' input buffered. Dak l-istream jista' jaqra 'l quddiem u jżomm bytes li jappartjenu lill-korp. L-istennija fuq is-socket ta' taħt tistaqsi biss jekk id-descriptor tal-fajl tiegħu huwiex lest; ma tistaqsix jekk l-istream Python diġà fihx data użabbli.

Segwi l-buffer li qara l-headers

Aqra l-korp ukoll permezz ta' self.rfile. Tinqabilx għal self.connection.recv wara li tanalizza l-headers bl-istream buffered. Inkella l-kodiċi jista' jaqbeż bytes li dak l-istream diġà qed iżomm u jistenna data li qatt mhu se tintbagħat mill-ġdid.

Li tgħaddi rfile innifsu lil select ma tagħmilx lil select jispezzjona l-buffer Python tiegħu. L-API tal-istat lesta taħdem permezz tad-descriptor tal-fajl tal-oġġett.

Għal talba b'Content-Length validu wieħed u mingħajr Transfer-Encoding, ikkonsma eżattament in-numru ddikjarat ta' bytes, filwaqt li timmaniġġja tmiem kmieni tal-input u l-limiti tad-daqs u tal-ħin tiegħek. Taqrax sal-EOF: klijent li juża konnessjoni persistenti jista' jħalli l-konnessjoni miftuħa wara li jtemm it-talba.

Agħmel il-framing parti espliċita mill-proxy

Il-korpi tat-talbiet chunked jeħtieġu appoġġ għall-framing chunked. Ma jistgħux jinqraw billi tfittex Content-Length li ma jkunx hemm. Metadati tal-tul ambigwi jeħtieġu mogħdija ta' rifjut definita, minflok ma tagħżel il-header li jidher komdu.

Handler blocking jista' jkompli juża l-interface tal-istream tiegħu b'qari limitat. Proxy mmexxi mill-avvenimenti jeħtieġ mudell ta' buffer li jintegra l-qari bil-quddiem tal-parser mal-immaniġġjar tal-istat lesta. Li tbiddel timeout mhux se jġib ftehim bejn żewġ konsumaturi indipendenti tal-istess socket.

Dan id-dijanjosi huwa speċifiku għal fejn jinżammu l-bytes li jidħlu. Ladarba l-proxy jkun ikkonsma l-korp it-tajjeb, xorta jrid jgħaddi dak il-korp b'framing HTTP konsistenti. Il-handler standard http.server huwa post utli biex tifhem il-mekkaniżmu, iżda mhuwiex implimentazzjoni tal-proxy forward għall-produzzjoni.

Artikli relatati