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, serve basado 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.html con 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.html sin 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 + sendfile ya 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.