Show HN: Nano-web – un servidor web de un solo binario y baja latencia diseñado para servir SPAs
Servidores mínimos existentes y comparaciones
- Los comentaristas enumeran muchos servidores estáticos de un solo binario o muy pequeños: redbean, h2o, Caddy, BusyBox httpd, thttpd, Lwan, gatling, filed, varios pequeños servidores de Go y Crystal,
servebasado en node, y herramientas ad hoc. - Algunos sostienen que las implementaciones en C/assembly pueden lograr binarios por debajo de ~500KB e imágenes Docker por debajo de 200KB, frente a ~18MB para la imagen de nano-web.
- Otros señalan que “mínimo” se refiere más a una superficie de ataque y a menos funciones que al tamaño del binario; no siempre hace falta una pequeñez extrema.
Enrutado de SPA y códigos de estado HTTP
- Un hilo importante debate el enrutado de SPA: si las rutas desconocidas deben devolver
index.htmlcon HTTP 200 o preservar la semántica correcta de 404/40x. - Una postura: para routers del lado del cliente (React Router, etc.), el servidor no puede saber qué rutas son válidas; servir siempre 200 + index es pragmático y común, especialmente en alojamiento estático (por ejemplo, S3).
- La otra postura: devolver 200 para recursos inexistentes rompe las expectativas de la web, el SEO, las vistas previas de enlaces, el historial del navegador y las herramientas de seguridad; los servidores y herramientas deberían soportar 404 correctos con contenido de error renderizado por la SPA.
- Se comentan soluciones alternativas: manejo basado en prefijos, compartir definiciones de rutas con el servidor, enrutado basado en hash (
/#...) o usar frameworks de SSG/SSR (Astro, Next, Hugo, Rails, Phoenix).
Comportamiento de CloudFront/S3 para SPAs
- Algunos recuerdan que históricamente CloudFront no mapeaba
/dir→/dir/index.htmlsin Lambda@Edge; otros dicen que ahora funciona o depende de los endpoints de sitio de S3 y de la configuración específica. - Un patrón consiste en configurar una página de respaldo 404 (
index.html) para las SPAs, lo que hace que cada enlace profundo devuelva estado 404 pero aun así renderice la SPA; aceptable para algunas aplicaciones privadas/internas, pero problemático para sitios públicos.
Latencia, caché y rendimiento
- La caché en RAM de nano-web (incluidos los activos pre-gzip/brotli) se presenta como una forma de reducir latencia y uso de CPU.
- Los críticos argumentan que la caché de páginas del SO +
sendfileya proporcionan un rendimiento casi óptimo; las diferencias son de microsegundos frente a la latencia de red. - Algunos señalan que la descarga de TLS/HTTP/3 y las CDN suelen dominar la latencia; detrás de una CDN, la elección del servidor estático suele importar muy poco.
Unikernels, despliegue y ecosistema
- Un aspecto destacable es la integración con el unikernel Nanos, además de Docker.
- A algunos les entusiasman los unikernels como un primitivo tipo PaaS y quieren más uso en el mundo real para validar sus beneficios; consideran que las herramientas son decentes, pero que la documentación necesita mejoras.
- Otros preguntan por la adopción en producción de Nanos; en el hilo no se aportan historias concretas de producción a gran escala.