Останнім часом проект GNU випустив реліз нова версія бібліотеки libmicrohttpd 0.9.74, Представляє простий API для вбудованих функцій HTTP-сервера в додатках.
Бібліотека підтримує протокол HTTP 1.1, TLS, інкрементну обробку запиту POST, базова аутентифікація і дайджест, IPv6, SHOUTcast, а також різні методи мультиплексування з'єднань (select, poll, pthread, thread pool), на даний момент реалізація підтримує різні підтримувані платформи, включаючи GNU / Linux, FreeBSD, OpenBSD, NetBSD, Solaris, Android , macOS, Win32, Symbian та z/OS.
GNU libmicrohttpd народився завдяки потребам його автора, якому на той час потрібен був простий спосіб додати паралельний HTTP-сервер до інших проектів. Існуючі альтернативи були невільними, неповторними, автономними, жахливою якістю коду або їх комбінацією.
З характеристик які виділяються для цієї реалізації:
- Бібліотека C: швидка і маленька
- API простий, виразний і повністю повторний.
- Реалізація відповідає вимогам HTTP 1.1
- HTTP-сервер може слухати на кількох портах
- Кілька режимів потоків: запуск у потоці програми, внутрішньому потоку, пулі потоків і потоках на з’єднання
- Три різні режими опитування сокетів: вибір (), опитування () і epoll
- Мінімальна кількість системних викликів, щоб уникнути додаткових змін ядра / режиму користувача
- Підтримувані платформи включають GNU / Linux, FreeBSD, OpenBSD, NetBSD, Android, Darwin (macOS), W32, OpenIndiana /
- Solaris і z / ОС
- Підтримка 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 використовував багато порівнянь рядків
В кінці кінців якщо вам цікаво дізнатись більше про це про цей випуск ви можете ознайомитися з посібниками користувача та іншою інформацією на його веб-сайті.