Gellir byffro cyrff POST procsi HTTP Python yn rfile
Darllenwch gais procsi HTTP Python trwy fewnbwn byffredig y trafodwr yn lle aros am feitiau sydd eisoes wedi gadael byffer y soced.
Mae'r procsi ymlaen yn darllen llinell y cais a'r penawdau, yn eu hanfon ymlaen, ac yna'n aros yn select am gorff POST. Mae'r cleient eisoes wedi'i anfon. Mae'n ymddangos bod y ddwy ochr yn aros am ei gilydd.
Gyda BaseHTTPRequestHandler Python, mae darllen y penawdau yn mynd trwy rfile, ffrwd fewnbwn byffredig. Gall y ffrwd honno ddarllen ymlaen a chadw beitiau sy'n perthyn i'r corff. Mae aros ar y soced sylfaenol yn gofyn yn unig a yw ei ddangosydd ffeil yn barod; nid yw'n gofyn a yw ffrwd Python eisoes yn cynnwys data defnyddiadwy.
Dilynwch y byffer a ddarllenodd y penawdau
Darllenwch y corff trwy self.rfile hefyd. Peidiwch â newid i self.connection.recv ar ôl dadansoddi'r penawdau gyda'r ffrwd byffredig. Fel arall gall y cod osgoi beitiau sydd eisoes yn cael eu cadw gan y ffrwd honno ac aros am ddata na fydd byth yn cael ei anfon eto.
Nid yw trosglwyddo rfile ei hun i select yn gwneud i select archwilio ei byffer Python. Mae'r API parodrwydd yn gweithio trwy ddangosydd ffeil y gwrthrych.
Ar gyfer cais ag un Content-Length dilys ac heb Transfer-Encoding, defnyddiwch yn union y nifer a ddatganwyd o feitiau, gan drin diwedd cynnar y mewnbwn a'ch terfynau maint ac amser. Peidiwch â darllen hyd at EOF: gall cleient sy'n defnyddio cysylltiad parhaus adael y cysylltiad ar agor ar ôl gorffen y cais.
Gwnewch ffrâmio yn rhan amlwg o'r procsi
Mae angen cymorth ffrâmio darnog ar gyrff cais darnog. Ni ellir eu darllen trwy chwilio am Content-Length sy'n absennol. Mae angen llwybr gwrthod diffiniedig ar metadata hyd amwys, yn hytrach na dewis pa bennawd bynnag sy'n ymddangos yn gyfleus.
Gall trafodwr blocio barhau i ddefnyddio ei ryngwyneb ffrwd gyda darlleniadau cyfyngedig. Mae angen model byffer ar brocsi a yrrir gan ddigwyddiadau sy'n integreiddio darllen ymlaen y parser â thrin parodrwydd. Ni fydd newid terfyn amser yn cymodi dau ddefnyddiwr annibynnol o'r un soced.
Mae'r diagnosis hwn yn benodol i ble mae'r beitiau sy'n dod i mewn yn cael eu cadw. Unwaith y bydd y procsi wedi defnyddio'r corff cywir, mae dal angen anfon y corff hwnnw ymlaen gyda ffrâmio HTTP cyson. Mae trafodwr http.server safonol yn lle defnyddiol i ddeall y mecanwaith, ond nid yw'n weithrediad procsi ymlaen cynhyrchu.