A liña de petición que encamiña HTTP de Node a través dun proxy
Constrúe unha petición HTTP de proxy sinxela co cliente básico de Node separando o punto de conexión, o obxectivo absoluto e a cabeceira Host.
Nunha petición HTTP ordinaria a través dun proxy de reenvío, Node conéctase ao proxy e envía o URL de destino na liña de petición. Tres valores describen esa única petición:
| Valor | Exemplo |
|---|---|
| Punto de conexión TCP | proxy.example:8080 |
| Obxectivo da petición | http://example.com/news?q=proxy |
| Cabeceira Host | example.com |
Este exemplo de Node 22 fai explícita a separación:
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);
O punto de conexión é un marcador de posición; escolla un candidato da lista de proxies HTTP para unha proba HTTP pública e comprobe a súa resposta. O exemplo esgota a resposta despois de imprimir o estado; unha aplicación pode consumir o corpo no seu lugar. A consulta segue formando parte do obxectivo da petición.
Por que o URL completo pertence alí
Un servidor de orixe recibe normalmente un obxectivo como /news?q=proxy. Un proxy de reenvío tamén necesita o destino, por iso HTTP/1.1 define o obxectivo en forma absoluta:
GET http://example.com/news?q=proxy HTTP/1.1
Host: example.com
Segundo as regras de HTTP/1.1, un proxy que recibe a forma absoluta utiliza a autoridade do URI ao reenviar e substitúe un campo Host recibido incoherente. Enviar unha cabeceira Host de destino coherente mantén a petición saínte inequívoca. O nome de host da conexión de Node é o intermediario, así que estableza a cabeceira deliberadamente en vez de confiar nesa dirección de conexión.
Se se require autenticación, as credenciais do proxy pertencen ao seu salto. A opción de petición auth de Node crea unha cabeceira Authorization para o recurso; non é unha opción xeral de inicio de sesión de proxy. Use o esquema que esixe o proxy e un cliente de proxy axeitado cando o intercambio é máis complexo.
HTTPS engade un túnel
Este exemplo cobre o reenvío HTTP simple. Unha conexión HTTPS a través dun proxy HTTP típica solicita primeiro CONNECT example.com:443 e despois inicia TLS cara ao destino dentro do túnel aceptado. Cambiar o URL do exemplo a HTTPS non engade esas etapas.
Para HTTPS ou unha carga mixta, use un axente ou despachador de proxy mantido co soporte de túnel necesario. Para versións compatibles de Node, unha opción é o fetch de Undici cun ProxyAgent. Conserve este pequeno exemplo de cliente básico para casos nos que o intercambio HTTP simple é o que necesita controlar ou comprender.