Forward proxy ka ìlà ìbéèrè àti àwọn orí, ó gbé wọn lọ, lẹ́yìn náà ó dúró nínú select de ara POST. Olùpèsè ti fi ránṣẹ́ tẹ́lẹ̀. Àwọn ẹgbẹ́ méjèèjì dàbí ẹni tí wọ́n ń dúró de ara wọn.

Pẹ̀lú BaseHTTPRequestHandler ti Python, kíkà àwọn orí ń gba rfile kọjá, èyí tí ó jẹ́ ìṣàn ìwọlé tí a ti pamọ́. Ìṣàn yẹn lè kà síwájú, ó sì lè di àwọn byte tí ó jẹ́ ti ara mú. Dídúró lórí socket tí ó wà nísàlẹ̀ kìkì béèrè bóyá file descriptor rẹ̀ ti ṣetán; kò béèrè bóyá ìṣàn Python ti ní dátà tí ó wúlò.

Tẹ̀lé buffer tí ó ka àwọn orí

Ka ara náà nípasẹ̀ self.rfile pẹ̀lú. Má ṣe yí padà sí self.connection.recv lẹ́yìn tí o bá ti ṣàyẹ̀wò àwọn orí pẹ̀lú ìṣàn tí a ti pamọ́. Bí bẹ́ẹ̀ kọ́, kóòdù lè forí kọjá àwọn byte tí ìṣàn yẹn ti di, kí ó sì dúró de dátà tí a kò ní fi ránṣẹ́ mọ́.

Fífi rfile fúnra rẹ̀ fún select kò jẹ́ kí select yẹ̀wò buffer Python rẹ̀. API ìṣetán ń ṣiṣẹ́ nípasẹ̀ file descriptor ti ohun náà.

Fún ìbéèrè tí ó ní Content-Length kan tí ó tọ́ àti tí kò ní Transfer-Encoding, lo iye byte tí a kéde gan-an, kí o sì ṣàkóso òpin ìwọlé àìtọ́ àti àwọn ààlà ìwọ̀n àti àkókò rẹ. Má ka títí EOF: olùpèsè tí ó ń lo ìsopọ̀ dúró ṣinṣin lè fi ìsopọ̀ náà sílẹ̀ ní ṣíṣí lẹ́yìn tí ìbéèrè bá parí.

Sọ fífẹ̀rẹ̀ sí èyà tí ó ṣe kedere ti proxy

Àwọn ara ìbéèrè chunked nílò àtìlẹ́yìn fífẹ̀rẹ̀ chunked. A kò lè kà wọ́n nípasẹ̀ wíwa Content-Length tí kò sí. Metadata gígùn tí kò ṣe kedere nílò ọ̀nà ìkọ̀sílẹ̀ tí a ti ṣàlàyé, dípò yíyan orí tí ó dàbí ẹni tí ó rọrùn.

Handler tí ń dídúró lè máa lo ojú ìṣàn rẹ̀ pẹ̀lú kíkà tí ó ní ààlà. Proxy tí ìṣẹ̀lẹ̀ ń darí nílò àwòrán buffer tí ó so kíkà síwájú ti parser pọ̀ mọ́ ìṣàkóso ìṣetán. Yíyí àkókò ìdúró padà kò ní pa àwọn olùmúlò méjì tí ó yàtọ̀ mọ́ ẹnìkan tí socket kan náà.

Ìwádìí yìí ṣe pàtàkì sí ibi tí a ti di àwọn byte tí ń wọlé mú. Lẹ́yìn tí proxy bá ti lo ara tí ó tọ́, ó ṣì nílò láti fi ara yẹn ránṣẹ́ pẹ̀lú fífẹ̀rẹ̀ HTTP tí ó báramu. Handler http.server tí ó jẹ́ ìgbàlódé jẹ́ ibi tí ó wúlò láti lóye ẹ̀rọ náà, ṣùgbọ́n kì í ṣe ìmúṣẹ proxy ìforúkọsílẹ̀ fún ìgbékalẹ̀.

Àwọn àpilẹ̀kọ tó jọra