Forespørselslinjen som sender HTTP i Node gjennom en proxy
Lag en vanlig HTTP-proxyforespørsel med Nodes kjerneklient ved å dele opp tilkoblingsendepunktet, det absolutte målet og Host-headeren.
For en vanlig HTTP-forespørsel gjennom en videresendende proxy kobler Node seg til proxyen og sender mål-URL-en i forespørselslinjen. Tre verdier beskriver denne ene forespørselen:
| Verdi | Eksempel |
|---|---|
| TCP-tilkoblingsendepunkt | proxy.example:8080 |
| Forespørselsmål | http://example.com/news?q=proxy |
| Host-header | example.com |
Dette Node 22-eksempelet gjør skillet tydelig:
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 en plassholder; velg en kandidat fra HTTP-proxylisten for en offentlig HTTP-test og sjekk svaret. Eksempelet tømmer svaret etter å ha skrevet ut statusen; en applikasjon kan bruke kroppen i stedet. Spørringen forblir en del av forespørselsmålet.
Hvorfor den fullstendige URL-en hører hjemme der
En opprinnelsesserver mottar vanligvis et mål som /news?q=proxy. En videresendende proxy trenger også målet, derfor definerer HTTP/1.1 målet i absolutt form:
GET http://example.com/news?q=proxy HTTP/1.1
Host: example.com
Ifølge HTTP/1.1-reglene bruker en proxy som mottar absolutt form, URI-ens autoritet ved videresending og erstatter et inkonsistent mottatt Host-felt. En konsistent mål-Host-header gjør likevel den utgående forespørselen entydig. Nodes tilkoblingsvert er mellomleddet, så sett headeren bevisst i stedet for å stole på den tilkoblingsadressen.
Hvis autentisering kreves, hører proxyens påloggingsinformasjon til hoppet dens. Nodes auth-forespørselsvalg lager en Authorization-header for ressursen; det er ikke et generelt proxy-påloggingsvalg. Bruk skjemaet proxyen krever, og en passende proxyklient når utvekslingen er mer komplisert.
HTTPS legger til en tunnel
Dette eksempelet dekker vanlig HTTP-videresending. En typisk HTTPS-tilkobling gjennom en HTTP-proxy ber først om CONNECT example.com:443 og starter deretter TLS mot målet inne i den godtatte tunnelen. Å endre eksempel-URL-en til HTTPS legger ikke til disse trinnene.
For HTTPS eller en blandet arbeidsmengde, bruk en vedlikeholdt proxyagent eller dispatcher med den nødvendige tunnelstøtten. For kompatible Node-versjoner er ett alternativ Undicis fetch med en ProxyAgent. Behold dette lille kjerneklient-eksempelet for tilfeller der den vanlige HTTP-utvekslingen selv er det du må kontrollere eller forstå.