GNU libmicrohttpd 0.9.74 ya fue liberado y estas son sus novedades
Hace poco el proyecto GNU dio a conocer la liberación de la nueva versión de la biblioteca libmicrohttpd 0.9.74, que representa una API simple para la funcionalidad del servidor HTTP integrado en las aplicaciones.
La biblioteca admite el protocolo HTTP 1.1, TLS, procesamiento incremental de solicitudes POST, autenticación básica y resumida, IPv6, SHOUTcast y varios métodos para multiplexar conexiones (select, poll, pthread, grupo de subprocesos), actualmente la implementación cuenta con el soporte para diversas plataformas compatibles, de las cuales se incluyen GNU/Linux, FreeBSD, OpenBSD, NetBSD, Solaris, Android, macOS, Win32, Symbian yz/OS.
GNU libmicrohttpd nació debido a la necesidad de su autor, que en su momento necesitaba una manera fácil de agregar un servidor HTTP concurrente a otros proyectos. Las alternativas existentes eran no libres, no reentrantes, independientes, de una calidad de código terrible o una combinación de las mismas.
De las características que destacan a esta implementación:
- Biblioteca C: rápida y pequeña
- La API es simple, expresiva y completamente reentrada.
- La implementación es compatible con HTTP 1.1
- El servidor HTTP puede escuchar en varios puertos
- Varios modos de subprocesamiento: ejecutar en subproceso de aplicación, subproceso interno, grupo de subprocesos y subproceso por conexión
- Tres modos de sondeo de sockets diferentes: select (), poll () y epoll
- Número mínimo de llamadas al sistema para evitar cambios de modo de usuario / kernel adicionales
- Las plataformas compatibles incluyen GNU / Linux, FreeBSD, OpenBSD, NetBSD, Android, Darwin (macOS), W32, OpenIndiana /
- Solaris yz / OS
- Soporte para IPv6
- Soporte para SHOUTcast
- Soporte para procesamiento incremental de datos POST (opcional)
- Soporte para autenticación básica y implícita (opcional)
- Soporte para TLS (requiere libgnutls, opcional)
- El binario es solo de aproximadamente 32k (sin soporte TLS y otras características opcionales)
Principales novedades de libmicrohttpd 0.9.74
En esta nueva versión que se presenta de la librería podremos encontrar que se agregó una implementación experimental del protocolo WebSockets, que aún no está bien probado y está deshabilitado de manera predeterminada.
Otra de las novedades que se presenta es que se mejoró el cumplimiento de las especificaciones de implementación del protocolo HTTP 1.0/1.1, ademas de que se reelaboro el código para decodificar solicitudes fragmentadas.
Tambien se destaca que se agregó un código para devolver automáticamente los errores relacionados con solicitudes fragmentadas incorrectas, un tamaño de datos demasiado grande y una configuración incorrecta del encabezado Content-Length.
Se han realizado optimizaciones internas, por ejemplo, una gestión de memoria mejorada, una eficiencia de hash mejorada y la eliminación del análisis repetitivo de la versión del protocolo y el método HTTP.
Y tambien se destaca que se proporcionó una validación más estricta de los valores de los encabezados HTTP, permitió el uso de un carácter de tabulación en los valores de los encabezados de respuesta, pero prohibió el uso de espacios en los valores de los encabezados personalizados.
Ademas de ello, el código para generar encabezados HTTP en respuesta se ha reescrito por completo y la precisión del tiempo de espera se ha aumentado de segundos a milisegundos.
Se agregó la opción de compilación –enable-sanitizers[=address,undefined,leak,user-poison] para habilitar selectivamente modos de detección de problemas en el código.
Se corrigieron, aclararon, ampliaron y mejoraron las descripciones de las funciones de Doxy, con lo cual ahora se menciona que debería ser mucho más fácil aprender MHD con solo leer los encabezados.
De los demás cambios que se destacan de esta nueva versión:
- Descripciones mejoradas de funciones en el archivo de encabezado microhttpd.h.
- Las funciones de la API agregaron MHD_get_reason_phrase_len_for() y MHD_create_response_from_buffer_with_free_callback_cls(), MHD_CONNECTION_INFO_HTTP_STATUS flag MHD_get_connection_info(), así como las respuestas de banderas MHD_RF_TRH_SEND_HKE_1 y MHD_RF_SIVE_HOT_HDR_HDR_EPH_RF.
- Archivo de proyecto agregado para ensamblar en MSVC.
- La formación de encabezado de respuesta fue completamente reescrita. La nueva implementación es más robusta, fácil de mantener y expandible, y sigue mejor las especificaciones RFC HTTP.
- Mejoras en el rendimiento: ahora la versión HTTP y el método de solicitud se decodifican una sola vez (anteriormente, MHD usaba la comparación de cadenas muchas
Finalmente si estás interesado en poder conocer más al respecto sobre esta liberaría, puedes consultar los manuales de usuario y demás información en su sitio web.