A linha de requisição que encaminha o HTTP do Node por um proxy
Construa uma requisição HTTP de proxy simples com o cliente base do Node separando o endpoint de conexão, o destino absoluto e o cabeçalho Host.
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:
| Valor | Exemplo |
|---|---|
| Endpoint de conexão TCP | proxy.example:8080 |
| Destino da requisição | http://example.com/news?q=proxy |
| Cabeçalho Host | example.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.