Førespurnadslinja som ruter HTTP i Node gjennom ein proxy
Bygg ein vanleg HTTP-proxyførespurnad med kjerneklienten i Node ved å skilje tilkoplingsendepunktet, det absolutte målet og Host-headeren.
Ved ein vanleg HTTP-førespurnad gjennom ein framsendande proxy koplar Node til proxyen og sender mål-URL-en i førespurnadslinja. Tre verdiar skildrar den eine førespurnaden:
| Verdi | Døme |
|---|---|
| TCP-tilkoplingsendepunkt | proxy.example:8080 |
| Førespurnadsmål | http://example.com/news?q=proxy |
| Host-header | example.com |
Dette Node 22-dømet gjer skiljet tydeleg:
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);
Endepunktet er ein plasshaldar; vel ein kandidat frå HTTP-proxylista for ein offentleg HTTP-test og kontroller svaret. Dømet tømmer svaret etter å ha skrive ut statusen; ein applikasjon kan bruke kroppen i staden. Spørjinga blir verande ein del av førespurnadsmålet.
Kvifor den fulle URL-en høyrer der
Ein opphavsserver får vanlegvis eit mål som /news?q=proxy. Ein framsendande proxy treng òg målet, difor definerer HTTP/1.1 målet i absolutt form:
GET http://example.com/news?q=proxy HTTP/1.1
Host: example.com
Etter reglane i HTTP/1.1 brukar ein proxy som får absolutt form, autoriteten til URI-en ved videresending og erstattar eit inkonsistent motteke Host-felt. Å sende ein konsistent mål-Host-header held likevel den utgåande førespurnaden eintydig. Tilkoplingsvertnamnet i Node er mellomleddet, så set headeren med vilje i staden for å lite på den tilkoplingsadressa.
Viss autentisering er påkravd, høyrer legitimasjonen til proxyen til hoppet hans. Førespurnadsvalet auth i Node lagar ein Authorization-header for ressursen; det er ikkje eit generelt proxy-innloggingsval. Bruk skjemaet proxyen krev, og ein passande proxyklient når utvekslinga er meir kompleks.
HTTPS legg til ein tunnel
Dette dømet dekkjer vanleg HTTP-videresending. Ei typisk HTTPS-tilkopling gjennom ein HTTP-proxy ber først om CONNECT example.com:443 og startar så TLS til målet inne i den godtekne tunnelen. Å endre døme-URL-en til HTTPS legg ikkje til desse trinna.
For HTTPS eller ei blanda arbeidsmengd, bruk ein vedlikehalden proxyagent eller dispatcher med den nødvendige tunnelenstøtta. For kompatible Node-versjonar er eitt alternativ Undicis fetch med ein ProxyAgent. Hald dette vesle kjerneklientdømet for tilfelle der den vanlege HTTP-utvekslinga sjølv er det du må kontrollere eller forstå.