Begäransraden som dirigerar Nodes HTTP genom en proxy
Bygg en vanlig HTTP-proxybegäran med Nodes kärnklient genom att separera anslutningsändpunkten, det absoluta målet och Host-huvudet.
Vid en vanlig HTTP-begäran genom en vidarebefordrande proxy ansluter Node till proxyn och skickar mål-URL:en i begäransraden. Tre värden beskriver den enda begäran:
| Värde | Exempel |
|---|---|
| TCP-anslutningsändpunkt | proxy.example:8080 |
| Begärans mål | http://example.com/news?q=proxy |
| Host-huvud | example.com |
Det här Node 22-exemplet gör separationen tydlig:
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);
Ändpunkten är en platshållare; välj en kandidat från HTTP-proxylistan för ett offentligt HTTP-test och kontrollera svaret. Exemplet tömmer svaret efter att ha skrivit ut statusen; en applikation kan konsumera kroppen i stället. Frågan förblir en del av begärans mål.
Varför den fullständiga URL:en hör hemma där
En ursprungsserver tar normalt emot ett mål som /news?q=proxy. En vidarebefordrande proxy behöver också målet, därför definierar HTTP/1.1 målet i absolut form:
GET http://example.com/news?q=proxy HTTP/1.1
Host: example.com
Enligt HTTP/1.1-reglerna använder en proxy som tar emot absolut form URI:ns auktoritet vid vidarebefordran och ersätter ett inkonsekvent mottaget Host-fält. Att skicka ett konsekvent mål-Host-huvud håller ändå den utgående begäran entydig. Nodes anslutningsvärdnamn är mellanhanden, så sätt huvudet medvetet i stället för att lita på den anslutningsadressen.
Om autentisering krävs tillhör proxyns inloggningsuppgifter dess hopp. Nodes begäranalternativ auth skapar ett Authorization-huvud för resursen; det är inte ett allmänt proxy-inloggningsalternativ. Använd schemat proxyn kräver och en lämplig proxyklient när utbytet är mer komplicerat.
HTTPS lägger till en tunnel
Det här exemplet täcker vanlig HTTP-vidarebefordran. En typisk HTTPS-anslutning genom en HTTP-proxy begär först CONNECT example.com:443 och startar sedan TLS mot målet inne i den accepterade tunneln. Att ändra exemplets URL till HTTPS lägger inte till de stegen.
För HTTPS eller en blandad arbetsbelastning, använd en underhållen proxyagent eller dispatcher med det tunnelstöd som krävs. För kompatibla Node-versioner är ett alternativ Undicis fetch med en ProxyAgent. Behåll det här lilla kärnklientsexemplet för fall där själva den vanliga HTTP-utbytet är det du behöver kontrollera eller förstå.