Vishika CONNECT vya Node.js lazima vihifadhi head buffer
Shughulikia socket ya CONNECT na head buffer ya Node kwenye mpaka wa HTTP hadi handaki, ukihifadhi baiti zilizosomwa tayari zaidi ya vichwa.
Seva ya HTTP ya Node hushughulikia ombi la kawaida la proksi kupitia callback ya ombi. CONNECT huchukua njia nyingine: seva hutoa connect pamoja na ombi, socket ya mteja na head buffer.
Tukio hilo ni makabidhiano kati ya uchanganuzi wa HTTP na handaki. Hakuna kitu cha kawaida cha ServerResponse cha kuendelea kutumia kwa trafiki ya handaki.
| Hoja | Kinachobeba |
|---|---|
req | Ombi la CONNECT, ikiwa ni pamoja na mamlaka ya lengo na vichwa |
clientSocket | Muunganisho wa kurudi kwa mteja |
head | Data ya handaki ambayo Node imeshasoma zaidi ya vichwa vya HTTP, huenda ikiwa tupu |
Kamilisha uamuzi wa HTTP kabla ya kupeleka baiti
Thibitisha mwenyeji na bandari iliyoombwa, tumia sera ya ufikiaji na uthibitishaji ya proksi, na uanzishe muunganisho wa juu. CONNECT hutambua mamlaka kama service.example:443; chambua umbo hilo ukizingatia mamlaka za IPv6 badala ya kugawanya kipofu kwenye kila nukta mbili.
Handaki inapokubaliwa, tuma jibu la HTTP lililofanikiwa likifuatiwa na mstari tupu wa kuhitimisha. Kisha peleka baiti zozote za head juu kabla ya kuendelea na baiti za baadaye kutoka socket ya mteja. Kuambatisha kiska cha data kipya hakuwezi kurejesha buffer ambayo tayari imekabidhiwa kwa kishika kando.
Mfano rasmi wa handaki wa Node hufanya makabidhiano hayo kwa serverSocket.write(head) kabla ya kuunganisha mielekeo miwili ya mtiririko. Mfano wake mdogo unaonyesha mpito; proksi iliyowekwa inahitaji pia majaribio yenye mipaka ya muunganisho, udhibiti wa ufikiaji na usimamizi wa mzunguko wa maisha.
Baada ya mafanikio, baiti ni za itifaki ya huduma
Jibu la CONNECT lililofanikiwa hubadilisha muunganisho kuwa mtiririko wa baiti. Ikiwa lengo ni tovuti ya HTTPS, mabadilishano yake ya TLS husafiri ndani ya mtiririko huo. Kuweka handaki tu hakuhitaji proksi kutoa cheti mbadala cha tovuti.
Kabla ya kukubali CONNECT, kosa la HTTP linaweza kueleza kwa nini lilikataliwa. Baada ya kukubaliwa, kuandika HTTP 500 kwenye mtiririko kutaingiza baiti kwenye itifaki ya handaki. Badala yake, maliza au haribu muunganisho unaofaa katika hitilafu za baadaye.
Unganisha mielekeo yote miwili kwa ushughulikiaji wa mtiririko unaozingatia shinikizo la nyuma, na uamue jinsi matukio ya end, error na close yanavyomaliza mwenzake. Hifadhi head buffer ya awali kama sehemu ya modeli hiyo hiyo ya umiliki; ni data ya programu, si vichwa vya HTTP vya ziada vya kutupwa.