A továbbító proxy beolvassa a kérés sort és a fejléceket, továbbítja őket, majd a selectben egy POST-törzsre vár. A kliens már elküldte. Mindkét fél úgy tűnik, a másikra vár.

A Python BaseHTTPRequestHandlerével a fejlécek olvasása a rfile-n keresztül történik, amely pufferelt bemeneti adatfolyam. Ez az adatfolyam előreolvashat, és a törzshöz tartozó bájtokat tarthat. Az alatta lévő socketre várás csak azt kérdezi, készen áll-e a fájlleírója; nem kérdezi, hogy a Python adatfolyam már tartalmaz-e használható adatot.

Kövesse azt a puffert, amely a fejléceket olvasta

A törzset is a self.rfile-n keresztül olvassa. Ne váltson self.connection.recv-ra, miután a fejléceket a pufferelt adatfolyammal feldolgozta. Ellenkező esetben a kód megkerülheti az adatfolyam által már tartott bájtokat, és olyan adatokra várhat, amelyeket soha többé nem küldenek el.

Az rfile átadása a selectnek nem készteti a selectet a Python puffere vizsgálatára. A készenléti API az objektum fájlleíróján keresztül működik.

Egyetlen érvényes Content-Length-cel rendelkező és Transfer-Encoding nélküli kérésnél pontosan a bejelentett bájtszámot fogyassza el, kezelve a bemenet idő előtti végét, valamint a méret- és időkorlátokat. Ne olvasson az EOF-ig: az állandó kapcsolatot használó kliens a kérés befejezése után is nyitva tarthatja a kapcsolatot.

Tegye a keretezést a proxy kifejezett részévé

A darabolt kéréstörzsekhez darabolt keretezési támogatás kell. Nem olvashatók egy hiányzó Content-Length keresésével. A kétértelmű hosszúsági metaadatokhoz meghatározott elutasítási útvonal kell, ahelyett hogy a kényelmesnek tűnő fejlécet választanánk.

A blokkoló kezelő továbbra is használhatja adatfolyam-interfészét korlátozott olvasásokkal. Az eseményvezérelt proxynak olyan puffermodellre van szüksége, amely integrálja az elemző előreolvasását a készenlét kezelésével. Az időkorlát megváltoztatása nem békíti össze ugyanazon socket két független fogyasztóját.

Ez a diagnózis arra vonatkozik, hol tartják a bejövő bájtokat. Miután a proxy elfogyasztotta a megfelelő törzset, még tovább kell továbbítania azt konzisztens HTTP-keretezéssel. A szabványos http.server kezelő hasznos hely a mechanizmus megértéséhez, de nem termelési továbbítóproxy-implementáció.

Kapcsolódó cikkek