Forespørselslinjen som ruter Nodes HTTP gjennom en proxy
Bygg en vanlig HTTP-proxyforespørsel med Nodes kjerneklient ved å skille tilkoblingsendepunktet, det absolutte målet og Host-headeren.
Ved en vanlig HTTP-forespørsel gjennom en videresendende proxy kobler Node til proxyen og sender mål-URL-en i forespørselslinjen. Tre verdier beskriver den 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-eksemplet 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 kontroller svaret. Eksemplet tømmer svaret etter å ha skrevet ut statusen; en applikasjon kan konsumere kroppen i stedet. Spørringen forblir en del av forespørselsmålet.
Hvorfor den fulle 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
Etter HTTP/1.1-reglene bruker en proxy som mottar absolutt form, URI-ens autoritet ved videresending og erstatter et inkonsistent mottatt Host-felt. Å sende en konsistent mål-Host-header holder 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, tilhører proxyens legitimasjon hoppet dens. Nodes auth-forespørselsvalg oppretter en Authorization-header for ressursen; det er ikke et generelt proxy-innloggingsvalg. Bruk skjemaet proxyen krever, og en passende proxyklient når utvekslingen er mer kompleks.
HTTPS legger til en tunnel
Dette eksemplet dekker vanlig HTTP-videresending. En typisk HTTPS-tilkobling gjennom en HTTP-proxy ber først om CONNECT example.com:443 og starter deretter TLS til 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 tunnnelstøtten. For kompatible Node-versjoner er ett alternativ Undicis fetch med en ProxyAgent. Behold dette lille kjerneklient-eksemplet for tilfeller der den vanlige HTTP-utvekslingen selv er det du må kontrollere eller forstå.