Проект GNU опубликовал выпуск библиотеки libmicrohttpd 0.9.77, представляющей простой API для встраивания функциональности HTTP-сервера в приложения. Среди поддерживаемых платформ: GNU/Linux, FreeBSD, OpenBSD, NetBSD, Solaris, Android, macOS, Win32 и z/OS. Библиотека распространяется под лицензией LGPL 2.1+. В собранном виде библиотека занимает около 32 КБ.
Библиотека поддерживает протокол HTTP 1.1, TLS, инкрементальную обработку POST-запросов, basic- и digest-аутентификацию, IPv6, SHOUTcast, различные методы мультиплексирования соединений (select, poll, epoll) и модели многопоточности (например, можно использовать пул потоков или поток на соединение). Для снижения накладных расходов, возникающих при переключении контекста между ядром и пространством пользователя, число системных вызовов в процессе работы сведено к минимуму.
Наиболее заметные изменения:
- В API предложена новая функция MHD_get_version_bin() для получения информации о версии библиотеки в упакованном формате (например, 0x00097701).
- К форме, рекомендуемой в RFC, приведены идентификаторы алгоритмов, используемых для digest-аутентификации (“MD5” / “SHA-256” вместо “md5” / “sha-256”).
- Переписан код декодирования блоков в формате Base64, усилена проверка корректности входных данных в формате Base64.
- Улучшена настройка кросс-компиляции, повышена совместимость с POSIX и новыми версиями компиляторов.
- Добавлены внутренние тесты для проверки декодирования Base64, Basic Auth и свёрнутых длинных HTTP-заголовов.
- В тестах задействован обновлённый API библиотеки libcurl для скрытия предупреждений об использовании устаревших вызовов.
- Добавлена возможность использования компиляторов VC (Visual C) при сборке для систем ARM и ARM64.
- Любые отрицательные значения, возвращаемые callback-вызовом, теперь трактуются как ошибки (ранее отрицательные значения, за исключением предопределённых кодов ошибок, могли привести к неопределённому поведению).
- Добавлена обработка макроса препроцессора “DEBUG” (обработчик идентичен макросу “_DEBUG”).
- Исправлены накопившиеся ошибки.