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:

ValoreEsempio
Endpoint della connessione TCPproxy.example:8080
Destinazione della richiestahttp://example.com/news?q=proxy
Intestazione Hostexample.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.

Articoli correlati