En una petición HTTP ordinaria a través de un proxy de reenvío, Node se conecta al proxy y envía la URL de destino en la línea de petición. Tres valores describen esa única petición:

ValorEjemplo
Punto de conexión TCPproxy.example:8080
Objetivo de la peticiónhttp://example.com/news?q=proxy
Cabecera Hostexample.com

Este ejemplo de Node 22 hace explícita la 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);

El punto de conexión es un marcador de posición; elija un candidato de la lista de proxies HTTP para una prueba HTTP pública y compruebe su respuesta. El ejemplo agota la respuesta después de imprimir su estado; una aplicación puede consumir el cuerpo en su lugar. La consulta sigue formando parte del objetivo de la petición.

Por qué la URL completa pertenece ahí

Un servidor de origen normalmente recibe un objetivo como /news?q=proxy. Un proxy de reenvío también necesita el destino, por lo que HTTP/1.1 define el objetivo en forma absoluta:

GET http://example.com/news?q=proxy HTTP/1.1
Host: example.com

Según las reglas de HTTP/1.1, un proxy que recibe la forma absoluta utiliza la autoridad del URI al reenviar y reemplaza un campo Host recibido incoherente. Enviar una cabecera Host de destino coherente mantiene la petición saliente inequívoca. El nombre de host de la conexión de Node es el intermediario, así que establezca la cabecera deliberadamente en lugar de confiar en esa dirección de conexión.

Si se requiere autenticación, las credenciales del proxy pertenecen a su salto. La opción de petición auth de Node crea una cabecera Authorization para el recurso; no es una opción general de inicio de sesión de proxy. Utilice el esquema que exige el proxy y un cliente de proxy adecuado cuando el intercambio sea más complejo.

HTTPS añade un túnel

Este ejemplo cubre el reenvío HTTP simple. Una conexión HTTPS a través de un proxy HTTP típica solicita primero CONNECT example.com:443 y luego inicia TLS hacia el destino dentro del túnel aceptado. Cambiar la URL del ejemplo a HTTPS no añade esas etapas.

Para HTTPS o una carga mixta, utilice un agente o despachador de proxy mantenido con el soporte de túnel necesario. Para versiones compatibles de Node, una opción es el fetch de Undici con un ProxyAgent. Conserve este pequeño ejemplo de cliente básico para casos en los que el intercambio HTTP simple sea lo que necesita controlar o comprender.

Artículos relacionados