The project GNU has recently published the release of the library libmicrohttpd 1.0.0.0, marking the first stable release in 16 years for this project. The library, written in SI, provides a simple API for embedding HTTP server functionality into applications. It is supported on various platforms including GNU/Linux, FreeBSD, OpenBSD, NetBSD, Solaris, Android, MacOS, Win32, and Z/OS. The source code is distributed under the LGPL 2.1+ license. The library has a default size of about 200 KB, but can be assembled in a minimum size of 32 KB. It relies on LIBC and optionally LIBGNUTLS for TLS support.
Libmicrohttpd 1.0.0.0 supports HTTP 1.1, the TLS protocol, incremental processing of posts, and the ability to receive connections through multiple network ports. It also provides Basic and Digest authentication, IPV6, ShoutCast, various methods of multiplexing connections (such as Select, Poll, Epoll), and multiple threading models. To optimize performance, the library minimizes the number of system calls necessary when switching between the core and user space. The safety of the Libmicrohttpd code base has been validated through audits conducted by Mozilla and Red Hat.
The latest release of Libmicrohttpd brings several improvements and updates. These include:
- A rewritten codebase to achieve complete compliance with the requirements of RFC 9110 and 9112 for analyzing client requests. It offers both strict and soft compliance modes to balance between compatibility and higher security.
- Significant expansion of the digest authentication implementation to support capabilities specified in RFC 7617. This includes support for SHA-512, Userhash, and Username in an extended notation. Compatibility with the old RFC 2069 and the option to use HashiMD5 and Sha-256 are also preserved.
- Enhanced performance in multi-threaded environments and polling modes of sockets.
- Improvements in the BASIC authentication implementation with additional functions proposed in the ABI.
- Reworkings of the code for initializing Gnutls, providing the option to use both typical and specific GNUTLS system configurations while supporting the reduction of individual GNUTLS system configuration settings.
In the future, the