Ang maliit na proxy wrapper ay maaaring gumana para sa HTTPS at pagkatapos ay mag-hang kapag muling ginamit para sa isang protocol na ang server ay nagsasalita muna. Ang pinaghihinalaang linya ay madalas ang naghihintay na ang receive buffer ay magtapos sa \r\n\r\n.

Nagbibigay ang TCP ng stream sa kliyente. Ang isang receive call ay maaaring magbalik ng kalahati ng HTTP status line, isang buong tugon ng CONNECT, o ang tugon na iyon na agad na sinusundan ng tunnel data. Walang pangakong hihinto ang pagbasa sa dulo ng mga header.

Hanapin ang hangganan sa loob ng buffer

Para sa HTTP/1.1 CONNECT exchange, mag-ipon ng mga byte hanggang lumitaw ang terminator ng header kahit saan sa buffer. Hatiin sa unang paglitaw nito. I-parse ang status line at mga header mula sa unang bahagi; itago nang hiwalay ang lahat pagkatapos ng hangganan. Maglapat ng limitasyon sa laki ng header at timeout habang naghihintay, at ituring ang walang laman na socket read bilang saradong koneksyon sa halip na bagong anyaya na mag-loop.

Ang huling matagumpay na 2xx na tugon ay naglilipat ng koneksyon sa tunnel mode kaagad pagkatapos ng mga header na iyon. Ang mga byte na sumusunod ay tunnel byte na. Huwag itong itapon, huwag maghintay ng body ng tugon ng CONNECT, at huwag bigyang-kahulugan ang field na Content-Length bilang pahintulot na ubusin ang bahagi ng bagong protocol. Ang mga informational na tugon, kung mayroon, ay dapat pangasiwaan bago ang huling tugon na iyon.

Dapat ipasa ng wrapper ang mga natira nito

Ang pagbabalik lamang ng pinagbabatayang socket ay nagpapawala ng mga byte na nakuha na ng parser ng handshake mula rito. Ang susunod na mambabasa ay nangangailangan ng buffered stream na nagbibigay muna ng naka-save na buntot at pagkatapos ay nagpapatuloy sa mga socket read. Para sa isang server-first protocol, ang pagkawala ng paunang pagbati ay maaaring magpaiwan sa magkabilang panig na naghihintay nang walang hanggan.

Sa kabaligtaran, ang mga byte mula sa nabigong tugon ng CONNECT ay hindi pagbati ng tunnel. Ang 407 ay kabilang pa rin sa proxy exchange at nangangailangan ng paghawak ng authentication; ang ibang hindi matagumpay na status ay nangangailangan ng angkop na landas ng error.

Mahalaga ito lalo na kapag iniaangkop ang isang FTP o SSH client sa pamamagitan ng HTTP proxy. Kailangan din ng proxy na payagan ang hinihiling na port ng destinasyon, at maaaring kailanganin ng FTP ng karagdagang data connection. Nalulutas ng tamang pag-parse ng header ang paghahatid ng stream; hindi nito maibibigay ang pahintulot sa CONNECT o ang ikalawang channel ng FTP.

Kaugnay na mga artikulo