Python HTTP proxy-aren POST gorputzak rfile-n bufferda daitezke
Irakurri Python HTTP proxy eskaera handler-aren sarrerako bufferraren bidez, socket bufferretik dagoeneko irten diren byteen zain egon beharrean.
Aurreranzko proxy-ak eskaera-lerroa eta goiburuak irakurri, haiek birbidali, eta gero select-en POST gorputz baten zain geratzen da. Bezeroak dagoeneko bidali du. Bi aldeak elkarren zain daudela dirudi.
Pythoneko BaseHTTPRequestHandler-ekin, goiburuen irakurketa rfile bidez egiten da, sarrerako buffer-fluxu bat. Fluxu horrek aurrera irakur dezake eta gorputzari dagozkion byteak gorde. Azpiko socketean itxaroteak haren fitxategi-deskriptorea prest dagoen ala ez bakarrik galdetzen du; ez du galdetzen Python fluxuak jada erabil daitekeen daturik ote duen.
Jarraitu goiburuak irakurri zituen buffer-ari
Irakurri gorputza ere self.rfile bidez. Ez aldatu self.connection.recv-ra goiburuak buffer-fluxuarekin analizatu ondoren. Bestela, kodeak fluxu horrek jada gordetzen dituen byteak saihes ditzake eta inoiz gehiago bidaliko ez diren datuen zain egon.
rfile bera select-i pasatzeak ez du select haren Python bufferra aztertzea eragiten. Prestasun-APIak objektuaren fitxategi-deskriptorearen bidez egiten du lan.
Content-Length baliozko bat duen eta Transfer-Encoding ez duen eskaera batentzat, kontsumitu deklaratutako byte kopuru zehatza, sarreraren amaiera goiztiarra eta zure tamaina- eta denbora-mugak kudeatuz. Ez irakurri EOF arte: konexio iraunkorra erabiltzen duen bezeroak konexioa irekita utz dezake eskaera amaitu ondoren.
Egin markatzea proxy-aren zati esplizitu
Zatitutako eskaera-gorputzek markatze zatituaren laguntza behar dute. Ezin dira irakurri falta den Content-Length bat bilatuz. Luzera-metadatu anbiguoek baztertze-bide definitu bat behar dute, komenigarria dirudien goiburua hautatu beharrean.
Handler blokeatzaileak bere fluxu-interfazea erabil dezake irakurketa mugatuekin. Gertaerek bultzatutako proxy-ak buffer-eredu bat behar du, parser-aren aurrera-irakurketa prestasun-kudeaketarekin integratzen duena. Timeout bat aldatzeak ez ditu socket bereko bi kontsumitzaile independente adiskidetuko.
Diagnosi hau sarrerako byteak non gordetzen diren zehazten du. Proxy-ak gorputz egokia kontsumitu ondoren, oraindik gorputz hori HTTP markatze koherentearekin birbidali behar du. http.server handler estandarra mekanismoa ulertzeko leku erabilgarria da, baina ez da ekoizpeneko aurreranzko proxy inplementazioa.