Mejores Prácticas Fundamentales de HTTP
Un resumen condensado de las 25 prácticas HTTP más importantes para backends de Node.js, extraídas de cada página de esta sección.
Busca en todas las páginas de la documentación
Un resumen condensado de las 25 prácticas HTTP más importantes para backends de Node.js, extraídas de cada página de esta sección.
Establece requestTimeout en cada servidor: 30s es un valor predeterminado sensato - Conceptos básicos de HTTP en Node.
Establece headersTimeout > requestTimeout: Node 18+ impone esta relación o las conexiones se interrumpen a mitad de la solicitud.
Alinea keepAliveTimeout por debajo del tiempo de espera de inactividad del proxy: Evita errores 502 durante las implementaciones continuas - Límites de Keep-Alive y Conexión.
Reutiliza Agent saliente con keepAlive: true: Una conexión TCP por llamada descendente desperdicia descriptores de archivo y añade latencia.
Limita maxSockets en agentes salientes: Evita que una dependencia lenta agote los descriptores de archivo.
Establece tiempos de espera por solicitud en HTTP saliente: req.setTimeout() o la opción de tiempo de espera de la biblioteca en cada llamada.
Limita el tamaño del cuerpo de la solicitud: 1-10 MB para APIs JSON; rechaza temprano con 413 - Patrón de Middleware.
Siempre llama a res.end() exactamente una vez: Las respuestas colgadas son el error más común de HTTP sin procesar.
Devuelve códigos de estado apropiados: 201 para creaciones, 204 para eliminaciones, 422 para validación; no todo es 200 o 500.
Establece Content-Type con charset: application/json; charset=utf-8 para texto internacional.
Habilita trust proxy con recuento de saltos, no true: X-Forwarded-For falsificado elude los límites de velocidad - Conciencia del Proxy Inverso.
Registra los limitadores de velocidad después de confiar en el proxy: De lo contrario, cada cliente aparecerá como la IP del balanceador de carga.
Registra la IP del cliente desde req.ip, no la dirección del socket: La auditoría y el cumplimiento requieren el cliente real detrás del proxy.
Termina TLS en nginx/ALB/Cloudflare: Node habla HTTP/1.1 internamente a menos que gRPC necesite h2 - Consideraciones de HTTP/2 y HTTP/3.
Deshabilita proxy_buffering para flujos SSE: Los búferes de nginx rompen la entrega en tiempo real.
Normaliza las barras diagonales finales: Elige /users o /users/ y redirige la otra.
Maneja OPTIONS para CORS explícitamente: Los navegadores realizan un pre-vuelo antes de POST con encabezados personalizados.
Apagado elegante en SIGTERM: server.close() antes de process.exit - Kubernetes envía SIGTERM al eliminar un pod.
Comprobación de salud sin middleware de autenticación: /health o puerto separado para sondeos.
Transmite archivos grandes, no los almacenes en búfer: createReadStream().pipe(res) para PDFs y exportaciones.
Usa frameworks antes de 15 endpoints: El enrutamiento simple está bien para sidecars; las APIs públicas necesitan convenciones de middleware - Enrutamiento sin Frameworks.
Envuelve los manejadores asíncronos en try/catch (HTTP sin procesar): Express 5 hace esto automáticamente; createServer sin procesar no.
Aumenta ulimit -n en producción: El valor predeterminado de 1024 descriptores de archivo no es suficiente bajo carga.
Puertos de administración/internos separados: Métricas y salud en :8081, API pública en :3000.
Documenta el contrato del encabezado del proxy en ADR: Qué encabezados establece nginx, recuento de saltos y valores de tiempo de espera; las operaciones necesitan esto durante los incidentes.
requestTimeout en el servidor. Evita que un manejador lento mantenga las conexiones hasta que el balanceador de carga se rinda.
Solo para desarrollo local o gRPC. Las APIs de producción deben terminar TLS en el proxy y ejecutar HTTP/1.1 a Node.
Ejecuta implementaciones continuas bajo carga (k6 o artillery) y observa los picos de 502. Si se correlacionan con las implementaciones, reduce keepAliveTimeout.
En el tráfico este-oeste de VPC privada detrás de una malla mTLS, sí. Nunca en endpoints públicos con acceso a internet.
Sidecars de salud, receptores de webhooks con menos de 5 endpoints y herramientas internas sin autenticación. Todo lo demás se beneficia de las convenciones de Express o Fastify.
Versiones de la pila: Esta página fue escrita para Node.js 24.18.0 (LTS activa), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 y NestJS 11.
Revisado por Chris St. John·Última actualización: 16 jul 2026