Die versoekreël wat Node-HTTP deur 'n proxy lei
Bou 'n gewone HTTP-proxyversoek met Node se kernkliënt deur die verbindingseindpunt, die absolute teiken en die Host-kop te skei.
Vir 'n gewone HTTP-versoek deur 'n vorderingsproxy maak Node aan die proxy verbinding en stuur die bestemmings-URL in die versoekreël. Drie waardes beskryf daardie een versoek:
| Waarde | Voorbeeld |
|---|---|
| TCP-verbindingseindpunt | proxy.example:8080 |
| Versoekteiken | http://example.com/news?q=proxy |
| Host-kop | example.com |
Hierdie Node 22-voorbeeld maak die skeiding duidelik:
const http = require('node:http');
const destination = new URL('http://example.com/news?q=proxy');
const request = http.get({
hostname: 'proxy.example',
port: 8080,
path: destination.href,
headers: { Host: destination.host },
signal: AbortSignal.timeout(15000),
}, (response) => {
console.log(response.statusCode);
response.on('error', console.error);
response.resume();
});
request.on('error', console.error);
Die eindpunt is 'n plekhouer; kies 'n kandidaat uit die HTTP-proxylys vir 'n openbare HTTP-toets en kontroleer die antwoord. Die voorbeeld dreineer die antwoord nadat dit die status gedruk het; 'n toepassing kan eerder die liggaam verbruik. Die navraag bly deel van die versoekteiken.
Waarom die volle URL daar hoort
'n Oorsprongbediener ontvang gewoonlik 'n teiken soos /news?q=proxy. 'n Vorderingsproxy het ook die bestemming nodig, so HTTP/1.1 definieer die absolute-vorm-teiken:
GET http://example.com/news?q=proxy HTTP/1.1
Host: example.com
Volgens die HTTP/1.1-reëls gebruik 'n proxy wat absolute vorm ontvang die URI se gesag wanneer dit aanstuur en vervang 'n teenstrydige ontvangde Host-veld. Om 'n konsekwente bestemming-Host-kop te stuur hou die uitgaande versoek steeds ondubbelsinnig. Node se verbinding-hostnaam is die tussenganger, so stel die kop doelbewus eerder as om op daardie verbindingsadres te vertrou.
As verifikasie vereis word, hoort die proxy se geloofsbriewe by sy hop. Node se auth-versoekopsie skep 'n Authorization-kop vir die hulpbron; dit is nie 'n algemene proxy-aanmeldopsie nie. Gebruik die proxy se vereiste skema en 'n geskikte proxykliënt wanneer die uitruiling meer ingewikkeld is.
HTTPS voeg 'n tonnel by
Hierdie voorbeeld dek gewone HTTP-aansturing. 'n Tipiese HTTPS-verbinding deur 'n HTTP-proxy versoek eers CONNECT example.com:443, en begin dan TLS na die bestemming binne die aanvaarde tonnel. Om die voorbeeld-URL na HTTPS te verander voeg nie daardie stadiums by nie.
Vir HTTPS of 'n gemengde werklading, gebruik 'n onderhoude proxy-agent of dispatcher met die vereiste tonnelondersteuning. Vir versoenbare Node-weergawes is een opsie Undici se fetch met 'n ProxyAgent. Hou hierdie klein kernkliënt-voorbeeld vir gevalle waar die gewone HTTP-uitruiling self is wat jy moet beheer of verstaan.