Ved en almindelig HTTP-anmodning gennem en videresendende proxy forbinder Node til proxyen og sender destinations-URL'en i anmodningslinjen. Tre værdier beskriver den ene anmodning:

VærdiEksempel
TCP-forbindelsesendepunktproxy.example:8080
Anmodningsmålhttp://example.com/news?q=proxy
Host-headerexample.com

Dette Node 22-eksempel gør adskillelsen 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 pladsholder; vælg en kandidat fra HTTP-proxylisten til en offentlig HTTP-test, og kontroller dens svar. Eksemplet tømmer svaret efter at have udskrevet status; en applikation kan forbruge kroppen i stedet. Forespørgslen forbliver en del af anmodningsmålet.

Hvorfor den fulde URL hører til der

En originserver modtager normalt et mål som /news?q=proxy. En videresendende proxy har også brug for destinationen, så HTTP/1.1 definerer målet i absolut form:

GET http://example.com/news?q=proxy HTTP/1.1
Host: example.com

Efter HTTP/1.1-reglerne bruger en proxy, der modtager absolut form, URI'ens autoritet ved videresendelse og erstatter et inkonsistent modtaget Host-felt. Afsendelse af en konsistent destinations-Host-header holder stadig den udgående anmodning entydig. Nodes forbindelsesværtsnavn er mellemleddet, så sæt headeren bevidst i stedet for at stole på den forbindelsesadresse.

Hvis der kræves godkendelse, hører proxyens legitimationsoplysninger til dens hop. Nodes auth-anmodningsvalg opretter en Authorization-header til ressourcen; det er ikke et generelt proxy-loginvalg. Brug proxyens krævede skema og en passende proxyklient, når udvekslingen er mere kompliceret.

HTTPS tilføjer en tunnel

Dette eksempel dækker almindelig HTTP-videresendelse. En typisk HTTPS-forbindelse gennem en HTTP-proxy anmoder først om CONNECT example.com:443 og starter derefter TLS til destinationen inde i den accepterede tunnel. Ændring af eksemplets URL til HTTPS tilføjer ikke de trin.

Til HTTPS eller en blandet arbejdsbyrde skal du bruge en vedligeholdt proxy-agent eller dispatcher med den nødvendige tunneldækning. For kompatible Node-versioner er en mulighed Undicis fetch med en ProxyAgent. Behold dette lille kerneklient-eksempel til tilfælde, hvor den almindelige HTTP-udveksling selv er det, du skal kontrollere eller forstå.

Relaterede artikler