A Node HTTP-kiszolgáló a szokásos proxykérelmet a kérés-visszahívásán keresztül kezeli. A CONNECT más utat jár: a kiszolgáló a connect eseményt bocsátja ki a kéréssel, az ügyfél-csocketjével és egy head pufferrel.

Ez az esemény a HTTP-elemzés és az alagút közötti átadás. Nincs szokásos ServerResponse-objektum, amelyet az alagút forgalmához tovább lehetne használni.

ArgumentumMit hordoz
reqA CONNECT-kérés, beleértve a cél-hatóságot és a fejléceket
clientSocketAz ügyfélhez visszavezető kapcsolat
headAz alagút adatai, amelyeket a Node már beolvasott a HTTP-fejléceken túl, esetleg üresek

Fejezze be a HTTP-döntést a bájtok továbbítása előtt

Érvényesítse a kért gazdagépet és portot, alkalmazza a proxy hozzáférési és hitelesítési szabályzatát, majd létesítse a felfelé irányuló kapcsolatot. A CONNECT olyan hatóságot azonosít, mint service.example:443; ezt a formát az IPv6-hatóságokat szem előtt tartva elemezze, ahelyett hogy minden kettőspontnál vakon felosztaná.

Amikor az alagút elfogadásra kerül, küldje el a sikeres HTTP-választ és annak lezáró üres sorát. Ezután továbbítsa a head bájtokat felfelé, mielőtt folytatná az ügyfél-csocket későbbi bájtaival. Új adatfigyelő csatolásával nem lehet visszaszerezni egy puffert, amelyet már külön átadtak a kezelőnek.

A Node hivatalos alagút-példája ezt az átadást a serverSocket.write(head) hívással végzi, mielőtt összekapcsolná a két adatfolyam-irányt. Kis példája szemlélteti az átmenetet; egy telepített proxynak korlátozott kapcsolódási kísérletekre, hozzáférés-vezérlésre és életciklus-kezelésre is szüksége van.

Siker után a bájtok a szolgáltatás protokolljához tartoznak

A sikeres CONNECT-válasz bájtfolyammá alakítja a kapcsolatot. Ha a cél egy HTTPS-webhely, annak TLS-cseréje ezen a folyamon belül zajlik. Pusztán alagútba zárni nem igényli, hogy a proxy helyettesítő webhely-tanúsítványt adjon ki.

A CONNECT elfogadása előtt egy HTTP-hiba megmagyarázhatja az elutasítást. Elfogadás után egy HTTP 500 beírása a folyamba bájtokat injektálna az alagút protokolljába. Ehelyett későbbi hibák esetén szüntesse meg vagy semmisítse meg a megfelelő kapcsolatokat.

Kapcsolja össze mindkét irányt a visszanyomás-tudatos adatfolyam-kezelés segítségével, és döntse el, hogyan zárják le az end, error és close események a partnert. Őrizze meg a kezdeti head puffert ugyanazon tulajdonosi modell részeként; ezek alkalmazásadatok, nem eldobandó felesleges HTTP-fejlécek.

Kapcsolódó cikkek