Projekt GNU opublikował wydanie biblioteki libmicrohttpd 0.9.77, która oferuje prosty interfejs API do wbudowywania funkcjonalności serwera HTTP w aplikacje. Obsługiwane platformy to: GNU/Linux, FreeBSD, OpenBSD, NetBSD, Solaris, Android, macOS, Win32 i z/OS. Biblioteka jest udostępniana na licencji LGPL 2.1+. W skompilowanej formie biblioteka zajmuje około 32 KB.
Biblioteka wspiera protokół HTTP 1.1, TLS, inkrementalne przetwarzanie żądań POST, uwierzytelnianie basic i digest, 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 jest zminimalizowana.
Najbardziej zauważalne zmiany:
- W API dodano nową funkcję MHD_get_version_bin() do uzyskiwania informacji o wersji biblioteki w skompresowanym formacie (na przykład 0x00097701).
- Do formatu zalecanego w RFC dodano identyfikatory algorytmów wykorzystywanych do uwierzytelniania digest („MD5” / „SHA-256” zamiast „md5” / „sha-256”).
- Przepisano kod dekodowania bloków w formacie Base64, wzmocniono sprawdzanie poprawności danych wejściowych w formacie Base64.
- Ulepszono konfigurację krzyżowej kompilacji, zwiększono zgodność z POSIX i nowymi wersjami kompilatorów.
- Dodano wewnętrzne testy do sprawdzania dekodowania Base64, Basic Auth i zwiniętych długich nagłówków HTTP.
- W testach wykorzystano zaktualizowane API biblioteki libcurl, aby ukryć ostrzeżenia o użyciu przestarzałych wywołań.
- Dodano możliwość używania kompilatorów VC (Visual C) przy kompilacji dla systemów ARM i ARM64.
- Wszystkie wartości ujemne zwracane przez wywołania callback są teraz interpretowane jako błędy (wcześniej wartości ujemne, z wyjątkiem zdefiniowanych kodów błędów, mogły prowadzić do nieokreślonego zachowania).
- Dodano obsługę makra preprocessora „DEBUG” (obsługuje identycznie jak makro „_DEBUG”).
- Naprawiono narosłe błędy.
Źródło: opennet.ru
