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:

VerdiEksempel
TCP-tilkoblingsendepunktproxy.example:8080
Forespørselsmålhttp://example.com/news?q=proxy
Host-headerexample.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å.

Relaterte artikler