De verzoekregel die HTTP van Node via een proxy leidt
Bouw een gewoon HTTP-proxyverzoek met de kernclient van Node door het verbindingseindpunt, het absolute doel en de Host-header te scheiden.
Bij een gewoon HTTP-verzoek via een doorgaande proxy verbindt Node met de proxy en stuurt de bestemmings-URL in de verzoekregel. Drie waarden beschrijven dat ene verzoek:
| Waarde | Voorbeeld |
|---|---|
| TCP-verbindingseindpunt | proxy.example:8080 |
| Verzoekdoel | http://example.com/news?q=proxy |
| Host-header | example.com |
Dit Node 22-voorbeeld maakt de scheiding expliciet:
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);
Het eindpunt is een plaatsaanduiding; kies een kandidaat uit de HTTP-proxylijst voor een openbare HTTP-test en controleer de respons. Het voorbeeld leest de respons leeg nadat de status is afgedrukt; een toepassing kan in plaats daarvan de body verbruiken. De query blijft deel van het verzoekdoel.
Waarom de volledige URL daar hoort
Een oorspronkelijke server ontvangt normaal een doel zoals /news?q=proxy. Een doorgaande proxy heeft ook de bestemming nodig, daarom definieert HTTP/1.1 het doel in absolute vorm:
GET http://example.com/news?q=proxy HTTP/1.1
Host: example.com
Volgens de regels van HTTP/1.1 gebruikt een proxy die de absolute vorm ontvangt het gezag van de URI bij het doorsturen en vervangt een inconsistente ontvangen Host-veld. Een consistente bestemmings-Host-header sturen houdt het uitgaande verzoek toch ondubbelzinnig. De verbindingshostnaam van Node is de tussenpersoon, dus stel de header bewust in in plaats van op dat verbindingsadres te vertrouwen.
Als verificatie nodig is, horen de inloggegevens van de proxy bij zijn hop. De verzoekoptie auth van Node maakt een Authorization-header voor de resource; het is geen algemene proxy-inlogoptie. Gebruik het schema dat de proxy vereist en een geschikte proxyclient wanneer de uitwisseling ingewikkelder is.
HTTPS voegt een tunnel toe
Dit voorbeeld behandelt gewoon HTTP-doorsturen. Een typische HTTPS-verbinding via een HTTP-proxy vraagt eerst CONNECT example.com:443 aan en start dan TLS naar de bestemming binnen de geaccepteerde tunnel. De voorbeeld-URL naar HTTPS wijzigen voegt die stappen niet toe.
Gebruik voor HTTPS of een gemengde werkbelasting een onderhouden proxyagent of dispatcher met de vereiste tunnelondersteuning. Voor compatibele Node-versies is één optie de fetch van Undici met een ProxyAgent. Houd dit kleine kernclientvoorbeeld voor gevallen waarin de gewone HTTP-uitwisseling zelf is wat u moet beheersen of begrijpen.