Boas Práticas Fundamentais de HTTP
Um resumo condensado das 25 práticas HTTP mais importantes para backends Node.js - extraído de todas as páginas desta seção.
Busque em todas as páginas da documentação
Um resumo condensado das 25 práticas HTTP mais importantes para backends Node.js - extraído de todas as páginas desta seção.
Defina requestTimeout em cada servidor: 30s é um padrão razoável - Fundamentos de HTTP em Node.
Defina headersTimeout > requestTimeout: Node 18+ impõe essa relação ou as conexões quebram no meio da requisição.
Alinhe keepAliveTimeout abaixo do timeout ocioso do proxy: Evita 502s durante implantações contínuas - Keep-Alive e Limites de Conexão.
Reutilize Agent de saída com keepAlive: true: Uma conexão TCP por chamada downstream desperdiça FDs e adiciona latência.
Limite maxSockets em agentes de saída: Evite que uma dependência lenta esgote os descritores de arquivo.
Defina timeouts por requisição em HTTP de saída: req.setTimeout() ou opção de timeout da biblioteca em cada chamada.
Limite o tamanho do corpo da requisição: 1-10 MB para APIs JSON; rejeite cedo com 413 - Padrão de Middleware.
Sempre chame res.end() exatamente uma vez: Respostas pendentes são o bug mais comum de HTTP bruto.
Retorne códigos de status apropriados: 201 para criações, 204 para exclusões, 422 para validação - nem tudo é 200 ou 500.
Defina Content-Type com charset: application/json; charset=utf-8 para texto internacional.
Habilite trust proxy com contagem de saltos, não true: X-Forwarded-For falsificado ignora limites de taxa - Consciência de Proxy Reverso.
Registre limitadores de taxa após trust proxy: Caso contrário, cada cliente aparecerá como o IP do balanceador de carga.
Registre o IP do cliente de req.ip, não do endereço do socket: Auditoria e conformidade exigem o cliente real por trás do proxy.
Termine TLS em nginx/ALB/Cloudflare: Node fala HTTP/1.1 internamente, a menos que gRPC precise de h2 - Considerações sobre HTTP/2 e HTTP/3.
Desabilite proxy_buffering para fluxos SSE: Buffers do nginx quebram a entrega em tempo real.
Normalize barras invertidas finais: Escolha /users ou /users/ e redirecione o outro.
Manipule OPTIONS para CORS explicitamente: Navegadores fazem pré-verificação antes de POST com cabeçalhos personalizados.
Encerramento gracioso em SIGTERM: server.close() antes de process.exit - Kubernetes envia SIGTERM na exclusão do pod.
Verificação de integridade sem middleware de autenticação: /health ou porta separada para sondas.
Transmita arquivos grandes, não armazene em buffer: createReadStream().pipe(res) para PDFs e exportações.
Use frameworks antes de 15 endpoints: Roteamento simples é bom para sidecars; APIs públicas precisam de convenções de middleware - Roteamento sem Frameworks.
Envolva manipuladores assíncronos em try/catch (HTTP bruto): Express 5 faz isso automaticamente; createServer bruto não.
Aumente ulimit -n em produção: O padrão de 1024 descritores de arquivo não é suficiente sob carga.
Separe portas de administração/internas: Métricas e integridade em :8081, API pública em :3000.
Documente o contrato de cabeçalho do proxy no ADR: Quais cabeçalhos o nginx define, contagem de saltos e valores de timeout - a operação precisa disso durante incidentes.
requestTimeout no servidor. Ele impede que um manipulador lento mantenha as conexões até que o balanceador de carga desista.
Apenas para desenvolvimento local ou gRPC. APIs de produção devem terminar TLS no proxy e executar HTTP/1.1 para o Node.
Execute implantações contínuas sob carga (k6 ou artillery) e observe picos de 502. Se eles coincidirem com as implantações, diminua keepAliveTimeout.
Em tráfego privado VPC leste-oeste atrás de malha mTLS, sim. Nunca em endpoints voltados para o público.
Sidecars de integridade, receptores de webhook com menos de 5 endpoints e ferramentas internas sem autenticação. Todo o resto se beneficia das convenções do Express ou Fastify.
Versões da Stack: Esta página foi escrita para Node.js 24.18.0 (Active LTS), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 e NestJS 11.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026