Anmodningslinjen der sender Node HTTP gennem en proxy
Byg en almindelig HTTP-proxyanmodning med Nodes kerneklient ved at adskille forbindelsesendepunktet, det absolutte mål og Host-headeren.
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ærdi | Eksempel |
|---|---|
| TCP-forbindelsesendepunkt | proxy.example:8080 |
| Anmodningsmål | http://example.com/news?q=proxy |
| Host-header | example.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å.