El proyecto GNU ha publicado la versión 1.0.0 de la biblioteca libmicrohttpd, que se marca como el primer lanzamiento estable en 16 años de existencia del proyecto. La biblioteca está escrita en C y ofrece una API simple para integrar la funcionalidad de servidor HTTP en aplicaciones. Las plataformas soportadas incluyen: GNU/Linux, FreeBSD, OpenBSD, NetBSD, Solaris, Android, macOS, Win32 y z/OS. El código se distribuye bajo la licencia LGPL 2.1+. Al compilar, la biblioteca ocupa aproximadamente 200 KB por defecto y 32 KB en modo mínimo. Solo se utiliza libc en las dependencias, así como libgnutls en la compilación opcional con soporte TLS.
La biblioteca soporta el protocolo HTTP 1.1, TLS, procesamiento incremental de solicitudes POST, aceptación de conexiones en múltiples puertos de red, autenticación básica y digest, IPv6, SHOUTcast, varios métodos de multiplexión de conexiones (select, poll, epoll) y modelos de multihilo (por ejemplo, se puede utilizar un grupo de hilos o un hilo por conexión). Para reducir la sobrecarga debida al cambio de contexto entre el núcleo y el espacio de usuario, el número de llamadas al sistema durante el funcionamiento se ha minimizado. La seguridad de la base de código de libmicrohttpd está confirmada por auditorías realizadas por las empresas Mozilla y Red Hat.
Los cambios más notables en comparación con la versión anterior son:
- Se ha reescrito y ajustado el código para el análisis de solicitudes de clientes, cumpliendo completamente con los requisitos de RFC 9110 y 9112. Se ofrecen modos de cumplimiento estricto y suave de las especificaciones para equilibrar la compatibilidad con una mayor seguridad.
- Se ha rediseñado la implementación de la autenticación digest, ampliando significativamente el soporte de características presentes en el RFC 7617. Esto incluye el soporte para SHA-512, userhash y username en notación extendida. También se mantiene el soporte para el antiguo RFC 2069 y la posibilidad de usar hash MD5 y SHA-256.
- Mejorada la operación en entornos multiproceso y en modos de sondeo de sockets.
- Se ha rediseñado la implementación de la autenticación básica, para la cual se han propuesto funciones adicionales en el ABI.
- Se ha reescrito el código para la inicialización de GnuTLS. Se ha añadido la posibilidad de utilizar tanto la configuración del sistema estándar como una específica de libmicrohttpd para GnuTLS, así como soporte para la redefinición de configuraciones específicas del sistema de GnuTLS.
En el futuro, se planea desarrollar la rama libmicrohttpd 2, que garantizará el soporte para los protocolos HTTP/2 y HTTP/3, además de trabajar en la simplificación de la API y en el soporte para diferentes backends para TLS. El inicio del trabajo en la nueva rama será financiado por el fondo Sovereign, establecido en Alemania para estimular el desarrollo de infraestructuras digitales abiertas y ecosistemas de código abierto.
Fuente: opennet.ru
