Numa requisição HTTP comum através de um proxy de encaminhamento, o Node liga-se ao proxy e envia o URL de destino na linha de requisição. Três valores descrevem essa única requisição:

ValorExemplo
Endpoint de conexão TCPproxy.example:8080
Destino da requisiçãohttp://example.com/news?q=proxy
Cabeçalho Hostexample.com

Este exemplo para Node 22 torna a separação explícita:

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 endpoint é um marcador; escolha um candidato da lista de proxies HTTP para um teste HTTP público e verifique a resposta. O exemplo esgota a resposta depois de imprimir o estado; uma aplicação pode consumir o corpo. A consulta continua a fazer parte do destino da requisição.

Porque é que o URL completo pertence ali

Um servidor de origem recebe normalmente um destino como /news?q=proxy. Um proxy de encaminhamento também precisa do destino, por isso o HTTP/1.1 define o destino em forma absoluta:

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

Segundo as regras do HTTP/1.1, um proxy que recebe a forma absoluta usa a autoridade do URI ao encaminhar e substitui um campo Host recebido inconsistente. Enviar um cabeçalho Host de destino consistente mantém a requisição de saída inequívoca. O nome de anfitrião da conexão do Node é o intermediário, por isso defina o cabeçalho deliberadamente em vez de confiar nesse endereço de conexão.

Se for necessária autenticação, as credenciais do proxy pertencem ao seu salto. A opção de requisição auth do Node cria um cabeçalho Authorization para o recurso; não é uma opção geral de início de sessão no proxy. Use o esquema exigido pelo proxy e um cliente de proxy adequado quando a troca é mais complexa.

HTTPS acrescenta um túnel

Este exemplo cobre o encaminhamento HTTP simples. Uma ligação HTTPS através de um proxy HTTP típica pede primeiro CONNECT example.com:443 e depois inicia TLS para o destino dentro do túnel aceite. Alterar o URL do exemplo para HTTPS não acrescenta essas fases.

Para HTTPS ou uma carga mista, use um agente ou despachante de proxy mantido com o suporte de túnel necessário. Para versões compatíveis do Node, uma opção é o fetch do Undici com um ProxyAgent. Mantenha este pequeno exemplo de cliente base para casos em que a troca HTTP simples é precisamente o que precisa de controlar ou compreender.

Artigos relacionados