Dole masu sarrafa CONNECT na Node.js su kiyaye head buffer
Sarrafa CONNECT socket da head buffer na Node a kan iyakar HTTP zuwa tunnel, tare da kiyaye bytes da aka riga aka karanta bayan headers.
Sabar HTTP ta Node tana sarrafa buƙatar proxy ta yau da kullum ta hanyar callback ɗin buƙatar. CONNECT yana bin wata hanya: sabar tana fitar da connect tare da buƙatar, socket ɗin abokin ciniki da head buffer.
Wannan lamarin shine miƙa mulki tsakanin nazarin HTTP da tunnel. Babu wani abu na ServerResponse na yau da kullum da za a ci gaba da amfani da shi don zirga-zirgar tunnel.
| Hujja | Abin da yake ɗauka |
|---|---|
req | Buƙatar CONNECT, ciki har da ikon makoma da headers ɗinta |
clientSocket | Haɗin da zai koma ga abokin ciniki |
head | Bayanan tunnel da Node ya riga ya karanta bayan headers ɗin HTTP, mai yiwuwa babu komai |
Kammala shawarar HTTP kafin a tura bytes
Tabbatar da host da port ɗin da aka nema, yi amfani da manufar shiga da tabbatarwa ta proxy, sannan kafa haɗin sama. CONNECT yana gano wata hukuma kamar service.example:443; nazarci wannan siffar tare da la'akari da hukumomin IPv6 maimakon raba a makance a kowane hanji.
Lokacin da aka karɓi tunnel ɗin, aika amsar HTTP mai nasara tare da layin fanko na ƙarshe. Sannan tura kowane bytes na head zuwa sama kafin a ci gaba da bytes na baya daga socket ɗin abokin ciniki. Haɗa sabon mai sauraron bayanai ba zai iya dawo da buffer da aka riga aka bayar daban ga mai sarrafawa ba.
Misalin tunnel na hukuma na Node yana yin wannan miƙa mulki da serverSocket.write(head) kafin haɗa kwatancen rafi biyu. Ƙaramin misalinsa yana kwatanta sauyin; proxy da aka tura yana kuma buƙatar ƙayyadaddun yunƙurin haɗi, sarrafa shiga da kula da rayuwa.
Bayan nasara, bytes ɗin suna cikin ka'idar sabis ɗin
Amsar CONNECT mai nasara tana canza haɗin zuwa rafin bytes. Idan makasudin shafin HTTPS ne, musayar TLS ɗinsa yana tafiya cikin wannan rafin. Yin tunnel ɗin kawai baya bukatar proxy ya bayar da takardar shaidar gidan yanar gizo mai maye gurbin.
Kafin karɓar CONNECT, kuskuren HTTP zai iya bayyana dalilin da aka ƙi. Bayan karɓa, rubuta HTTP 500 cikin rafin zai shigar da bytes cikin ka'idar tunnel. A maimakon haka, ƙare ko lalata haɗin da suka dace a gazawar gaba.
Haɗa duka kwatance biyu da sarrafa rafi mai sanin matsin baya, kuma yanke shawara yadda end, error da close suke ƙare abokin. Kiyaye head buffer na farko a matsayin ɓangare na wannan tsarin mallaka; bayanan aikace-aikace ne, ba ƙarin HTTP headers da za a jefar ba.