Недавно проект GNU выпустил выпуск новая версия библиотеки libmicrohttpd 0.9.74, A, представляющий простой API для встроенных функций HTTP-сервера в приложениях.
Библиотека поддерживает протокол HTTP 1.1, TLS, инкрементную обработку запросов POST, базовая и дайджест-аутентификация, IPv6, SHOUTcast и различные методы для мультиплексирования соединений (выбор, опрос, pthread, пул потоков), в настоящее время реализация поддерживает различные поддерживаемые платформы, включая GNU / Linux, FreeBSD, OpenBSD, NetBSD, Solaris, Android , macOS, Win32, Symbian и z / OS.
GNU libmicrohttpd возникла из-за потребности ее автора, которому в то время требовался простой способ добавления параллельного HTTP-сервера в другие проекты. Существующие альтернативы были несвободными, невозвратными, автономными, с ужасным качеством кода или их комбинацией.
Из характеристик которые выделяются этой реализацией:
- Библиотека C: быстро и компактно
- API простой, выразительный и полностью повторяющийся.
- Реализация совместима с HTTP 1.1.
- HTTP-сервер может прослушивать несколько портов
- Несколько режимов работы с потоками: выполнение в потоке приложения, внутреннем потоке, пуле потоков и потоке на соединение
- Три разных режима опроса сокетов: select (), poll () и epoll
- Минимальное количество системных вызовов, чтобы избежать дополнительных изменений режима ядра / пользователя
- Поддерживаемые платформы включают GNU / Linux, FreeBSD, OpenBSD, NetBSD, Android, Darwin (macOS), W32, OpenIndiana /
- Solaris и z / OS
- Поддержка IPv6
- SHOUTcast поддержка
- Поддержка инкрементальной обработки данных POST (необязательно)
- Поддержка базовой и неявной аутентификации (необязательно)
- Поддержка TLS (требуется libgnutls, необязательно)
- Размер двоичного файла составляет всего около 32 КБ (без поддержки TLS и других дополнительных функций).
Основные новые возможности libmicrohttpd 0.9.74
В этой новой версии, представленной в библиотеке, мы можем найти, что добавлена экспериментальная реализация протокола WebSockets, который еще плохо протестирован и по умолчанию отключен.
Еще одна представленная новинка заключается в том, что улучшено соответствие спецификациям реализации протокола HTTP 1.0 / 1.1Кроме того, был переработан код для декодирования фрагментированных запросов.
Также подчеркивается, что добавлен код для автоматического возврата ошибок, связанных с ошибочными запросами по фрагментам, слишком большой размер данных и неправильная настройка заголовка Content-Length.
Было реализовано внутренние оптимизации, например, улучшенное управление памятью, повышенная эффективность хеширования и устранение повторяющегося синтаксического анализа метода HTTP и версии протокола.
Также следует отметить, что он обеспечивает более строгую проверку значений заголовка HTTP, разрешает использование символа табуляции в значениях заголовка ответа, но запрещает использование пробелов в значениях настраиваемого заголовка.
Кроме того, полностью переписан код для генерации HTTP-заголовков в ответ а точность тайм-аута была увеличена с секунд до миллисекунд.
Добавлен параметр сборки –enable-sanitizers [= адрес, неопределенный, утечка, пользовательский яд] для выборочного включения режимов обнаружения проблем в коде.
Исправлены, уточнены, расширены и улучшены описания функций Doxy, теперь упоминается, что изучение MHD должно быть намного проще, просто читая заголовки.
Из других изменений, которые выделяются в этой новой версии:
- Улучшено описание функций в заголовочном файле microhttpd.h.
- Функции API добавлена MHD_get_reason_phrase_len_for () и MHD_create_response_from_buffer_with_free_callback_cls (), MHD_CONNECTION_INFO_HTTP_STATUS флаг, MHD_get_connection_info (), а также ответы флаг MHD_CONNECTION_INFO_HTTP_STATUS, а ответы MHD_SDRIVE_HDRFKE_HDR_HDRF_HDR_HDRF_HDRF_REND_HDRF_HDRF_REND_HDRF_HDR_RF_RF_HDR_RF_HDRF_.
- Добавлен файл проекта для сборки в MSVC.
- Полностью переписано формирование заголовка ответа. Новая реализация более надежна, проще в обслуживании и расширяема, а также лучше соответствует спецификациям RFC HTTP.
- Улучшения производительности: теперь версия HTTP и метод запроса декодируются только один раз (ранее в MHD использовалось сравнение многих строк.
В конце концов если вам интересно узнать об этом больше об этом выпуске вы можете ознакомиться с руководствами пользователя и другой информацией на его веб-сайте.