27.02.2024

Первый стабильный выпуск библиотеки GNU libmicrohttpd

Проект GNU опубликовал выпуск библиотеки libmicrohttpd 1.0.0, который отмечен как первый стабильный релиз за 16 лет существования проекта. Библиотека написана на языке Си и представляет простой API для встраивания функциональности HTTP-сервера в приложения. Среди поддерживаемых платформ: GNU/Linux, FreeBSD, OpenBSD, NetBSD, Solaris, Android, macOS, Win32 и z/OS. Код распространяется под лицензией LGPL 2.1+. При сборке по умолчанию библиотека занимает около 200 КБ, а в минимальном режиме сборки — 32 КБ. В зависимостях используется только libc, а также libgnutls при опциональной сборке с поддержкой TLS.

Библиотека поддерживает протокол HTTP 1.1, TLS, инкрементальную обработку POST-запросов, приём соединений с нескольких сетевых портов, basic- и digest-аутентификацию, IPv6, SHOUTcast, различные методы мультиплексирования соединений (select, poll, epoll) и модели многопоточности (например, можно использовать пул потоков или поток на соединение). Для снижения накладных расходов, возникающих при переключении контекста между ядром и пространством пользователя, число системных вызовов в процессе работы сведено к минимуму. Безопасность кодовой базы libmicrohttpd подтверждена аудитами, проведёнными компаниями Mozilla и Red Hat.

Наиболее заметные изменения по сравнению с прошлым выпуском:

  • Переписан и приведён к полному соответствию требованиям RFC 9110 и 9112 код для разбора запросов клиентов. Предоставлены режимы строгого и мягкого соблюдения спецификаций для балансирования между совместимостью или более высокой безопасностью.
  • Переработана реализация digest-аутентификации, в которой значительно расширена поддержка возможностей, присутствующих в RFC 7617. В том числе обеспечена поддержка SHA-512, userhash и username в расширенной нотации.
    Также сохранена поддержка старого RFC 2069 и возможность использования хэшей MD5 и SHA-256.

  • Улучшена работа в многопоточных окружениях и при режимах полинга сокетов.
  • Переработана реализация basic-аутентификации, для которой в ABI предложены дополнительные функции.
  • Переделан код для инициализации GnuTLS. Добавлена возможность использования как типовой, так и специфичной для libmicrohttpd системной конфигурации GnuTLS, а также поддержка переопределения отдельных настроек системной конфигурации GnuTLS.

В дальнейшем планируется заняться разработкой ветки libmicrohttpd 2, в которой будет обеспечена поддержка протоколов HTTP/2 и HTTP/3, а также проведена работа по упрощению API и поддержке разных бэкендов для TLS. Начало работы над новой веткой будет профинансировано фондом Sovereign, учреждённым в Германии для стимулирования развития открытой цифровой инфраструктуры и экосистем с открытым исходным кодом.

Источник: https://www.opennet.ru/opennews/art.shtml?num=60540 Источник.