Projekt GNU ogłosił wydanie biblioteki libmicrohttpd 1.0.0, oznaczonej jako pierwszy stabilny release od 16 lat istnienia projektu. Biblioteka została napisana w języku C i oferuje prosty interfejs API do wbudowywania funkcjonalności serwera HTTP w aplikacje. Wśród wspieranych platform znajdują się: GNU/Linux, FreeBSD, OpenBSD, NetBSD, Solaris, Android, macOS, Win32 oraz z/OS. Kod jest rozpowszechniany na licencji LGPL 2.1+. Przy standardowej kompilacji biblioteka zajmuje około 200 KB, a w trybie minimalnym - 32 KB. W zależnościach używana jest tylko libc oraz libgnutls przy opcjonalnej kompilacji z wsparciem dla TLS.
Biblioteka wspiera protokół HTTP 1.1, TLS, inkrementalne przetwarzanie zapytań POST, przyjmowanie połączeń z kilku portów sieciowych, podstawową i złożoną autoryzację, IPv6, SHOUTcast, różne metody multiplexowania połączeń (select, poll, epoll) oraz modele wielowątkowości (na przykład, można użyć puli wątków lub jednego wątku na połączenie). Aby zredukować narzuty związane z przełączaniem kontekstu między jądrem a przestrzenią użytkownika, liczba wywołań systemowych podczas działania została zminimalizowana. Bezpieczeństwo bazy kodu libmicrohttpd zostało potwierdzone audytami przeprowadzonymi przez firmy Mozilla i Red Hat.
Najbardziej zauważalne zmiany w porównaniu do poprzedniego wydania:
- Kod do analizy żądań klientów został przepisał i dostosowany do pełnej zgodności z wymaganiami RFC 9110 i 9112. Zapewnione zostały tryby ścisłej i łagodnej zgodności ze specyfikacjami, aby zrównoważyć między kompatybilnością a wyższym bezpieczeństwem.
- Została przeprojektowana implementacja autoryzacji z użyciem digest, w której znacznie rozszerzono wsparcie dla możliwości obecnych w RFC 7617. Podano wspieranie SHA-512, userhash i username w rozszerzonej notacji. Zachowano również wsparcie dla starszego RFC 2069 i możliwość użycia hashy MD5 i SHA-256.
- Poprawiono działanie w środowiskach wielowątkowych oraz w trybach pollingu socketów.
- Została przeprojektowana implementacja autoryzacji basic, dla której w ABI wprowadzono dodatkowe funkcje.
- Kod inicjalizujący GnuTLS został przepisany. Dodano możliwość korzystania zarówno z typowej, jak i specyficznej dla libmicrohttpd konfiguracji systemowej GnuTLS, a także wsparcie dla nadpisywania poszczególnych ustawień systemowej konfiguracji GnuTLS.
W przyszłości planowane jest stworzenie gałęzi libmicrohttpd 2, w której zapewniona zostanie obsługa protokołów HTTP/2 i HTTP/3, a także przeprowadzona praca nad uproszczeniem interfejsu API i wsparciem dla różnych backendów obsługujących TLS. Prace nad nową gałęzią zostaną sfinansowane przez fundusz Sovereign, założony w Niemczech w celu wspierania rozwoju otwartej cyfrowej infrastruktury oraz ekosystemów z otwartym kodem źródłowym.
Źródło: opennet.ru
