Un servidor HTTP de Node gestiona una sol·licitud de proxy ordinària mitjançant la seva funció de retorn de sol·licitud. CONNECT segueix un altre camí: el servidor emet connect amb la sol·licitud, el sòcol del client i un búfer head.

Aquest esdeveniment és el lliurament entre l'anàlisi HTTP i un túnel. No hi ha cap objecte ServerResponse ordinari que es pugui continuar utilitzant per al trànsit del túnel.

ArgumentQuè transporta
reqLa sol·licitud CONNECT, incloent-hi la seva autoritat de destinació i les capçaleres
clientSocketLa connexió de tornada al client
headDades del túnel que Node ja ha llegit més enllà de les capçaleres HTTP, possiblement buides

Acabeu la decisió HTTP abans de retransmetre bytes

Valideu l'amfitrió i el port sol·licitats, apliqueu la política d'accés i autenticació del proxy i establiu la connexió ascendent. CONNECT identifica una autoritat com service.example:443; analitzeu aquesta forma tenint en compte les autoritats IPv6 en lloc de dividir cegament a cada dos punts.

Quan s'accepta el túnel, envieu la resposta HTTP correcta seguida de la seva línia en blanc final. A continuació, reenvieu qualsevol byte head cap amunt abans de continuar amb els bytes posteriors del sòcol del client. Adjuntar un nou oient de dades no pot recuperar un búfer ja lliurat per separat al gestor.

L'exemple oficial de túnel de Node realitza aquest lliurament amb serverSocket.write(head) abans de connectar les dues direccions del flux. El seu petit exemple il·lustra la transició; un proxy desplegat també necessita intents de connexió limitats, controls d'accés i gestió del cicle de vida.

Després de l'èxit, els bytes pertanyen al protocol del servei

Una resposta CONNECT correcta converteix la connexió en un flux de bytes. Si l'objectiu és un lloc HTTPS, el seu intercanvi TLS viatja dins d'aquest flux. Simplement tunelitzar-lo no requereix que el proxy emeti un certificat de lloc web substitut.

Abans d'acceptar CONNECT, un error HTTP pot explicar per què s'ha refusat. Després de l'acceptació, escriure un HTTP 500 al flux injectaria bytes al protocol del túnel. En lloc d'això, acabau o destruïu les connexions adequades en fallades posteriors.

Connecteu les dues direccions amb gestió de flux conscient de la contrapressió, i decidiu com els esdeveniments end, error i close acaben el company. Conserveu el búfer head inicial com a part d'aquest mateix model de propietat; són dades de l'aplicació, no capçaleres HTTP sobrants per descartar.

Articles relacionats