La riga di richiesta che instrada HTTP di Node attraverso un proxy
Costruisci una richiesta HTTP proxy semplice con il client principale di Node separando l'endpoint di connessione, la destinazione assoluta e l'intestazione Host.
Per una richiesta HTTP ordinaria attraverso un proxy in avanti, Node si connette al proxy e invia l'URL di destinazione nella riga di richiesta. Tre valori descrivono quella singola richiesta:
| Valore | Esempio |
|---|---|
| Endpoint della connessione TCP | proxy.example:8080 |
| Destinazione della richiesta | http://example.com/news?q=proxy |
| Intestazione Host | example.com |
Questo esempio per Node 22 rende esplicita la separazione:
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);
L'endpoint è un segnaposto; scegli un candidato dall'elenco di proxy HTTP per un test HTTP pubblico e controlla la sua risposta. L'esempio esaurisce la risposta dopo aver stampato lo stato; un'applicazione può consumare il corpo. La query rimane parte della destinazione della richiesta.
Perché l'URL completo appartiene lì
Un server di origine riceve normalmente una destinazione come /news?q=proxy. Un proxy in avanti ha bisogno anche della destinazione, quindi HTTP/1.1 definisce la destinazione in forma assoluta:
GET http://example.com/news?q=proxy HTTP/1.1
Host: example.com
Secondo le regole di HTTP/1.1, un proxy che riceve la forma assoluta usa l'autorità dell'URI durante l'inoltro e sostituisce un campo Host ricevuto incoerente. Inviare un'intestazione Host di destinazione coerente mantiene comunque la richiesta in uscita inequivocabile. Il nome host della connessione di Node è l'intermediario, quindi imposta l'intestazione deliberatamente invece di affidarti a quell'indirizzo di connessione.
Se è richiesta l'autenticazione, le credenziali del proxy appartengono al suo hop. L'opzione di richiesta auth di Node crea un'intestazione Authorization per la risorsa; non è un'opzione generale di accesso al proxy. Usa lo schema richiesto dal proxy e un client proxy adatto quando lo scambio è più complesso.
HTTPS aggiunge un tunnel
Questo esempio copre l'inoltro HTTP semplice. Una tipica connessione HTTPS attraverso un proxy HTTP richiede prima CONNECT example.com:443, poi avvia TLS verso la destinazione all'interno del tunnel accettato. Cambiare l'URL dell'esempio in HTTPS non aggiunge quelle fasi.
Per HTTPS o un carico misto, usa un agente o dispatcher proxy mantenuto con il supporto del tunnel richiesto. Per versioni di Node compatibili, un'opzione è il fetch di Undici con un ProxyAgent. Conserva questo piccolo esempio di client principale per i casi in cui lo scambio HTTP semplice è ciò che devi controllare o capire.