Miili ya POST ya proksi ya HTTP ya Python inaweza kuhifadhiwa kwenye rfile
Soma ombi la proksi ya HTTP ya Python kupitia ingizo lililohifadhiwa la handler badala ya kusubiri baiti ambazo tayari zimeondoka kwenye buffer ya socket.
Proksi ya mbele inasoma mstari wa ombi na vichwa, inavipitisha, kisha inasubiri kwenye select mwili wa POST. Mteja ameutuma tayari. Pande zote mbili zinaonekana kusubiri moja nyingine.
Kwa BaseHTTPRequestHandler ya Python, usomaji wa vichwa hupitia rfile, mkondo wa ingizo uliohifadhiwa. Mkondo huo unaweza kusoma mbele na kushikilia baiti ambazo ni za mwili. Kusubiri kwenye socket ya chini hakunauliza tu kama file descriptor yake iko tayari; haunaulizi kama mkondo wa Python una data inayoweza kutumika tayari.
Fuata buffer iliyovinasa vichwa
Soma mwili pia kupitia self.rfile. Usibadilishe kwenda self.connection.recv baada ya kuchanganua vichwa na mkondo uliohifadhiwa. Vinginevyo msimbo unaweza kuruka baiti ambazo mkondo huo unashikilia tayari na kusubiri data ambayo haitatumwa tena.
Kupitisha rfile yenyewe kwa select hakutafanya select kuchunguza buffer yake ya Python. API ya utayari hufanya kazi kupitia file descriptor ya kitu.
Kwa ombi lenye Content-Length moja halali na lisilo na Transfer-Encoding, tumia kwa usahihi idadi iliyotangazwa ya baiti, ukishughulikia mwisho wa ingizo mapema na mipaka yako ya ukubwa na muda. Usisome hadi EOF: mteja anayetumia muunganisho wa kudumu anaweza kuacha muunganisho wazi baada ya kumaliza ombi.
Fanya uwekaji wa fremu kuwa sehemu dhahiri ya proksi
Miili ya ombi iliyogawanywa inahitaji msaada wa uwekaji wa fremu iliyogawanywa. Haiwezi kusomwa kwa kutafuta Content-Length ambayo haipo. Metadata ya urefu isiyo wazi inahitaji njia maalum ya kukataa, badala ya kuchagua kichwa kinachoonekana kuwa rahisi.
Handler inayozuia inaweza kuendelea kutumia kiolesura chake cha mkondo kwa usomaji wenye mipaka. Proksi inayoendeshwa na matukio inahitaji modeli ya buffer inayounganisha usomaji wa mbele wa parser na ushughulikiaji wa utayari. Kubadilisha muda wa kusubiri hakutapatanisha watumiaji wawili huru wa socket moja.
Utambuzi huu unahusu mahali ambapo baiti zinazoingia zinashikiliwa. Baada ya proksi kutumia mwili sahihi, bado inahitaji kuupitisha mwili huo kwa uwekaji wa fremu wa HTTP thabiti. Handler ya kawaida ya http.server ni mahali muhimu pa kuelewa utaratibu, lakini si utekelezaji wa proksi ya mbele kwa uzalishaji.