Ostatnio projekt GNU wydał wydanie nowa wersja biblioteki biblioteka libmicrohttpd 0.9.74, Reprezentujący prosty interfejs API dla wbudowanej funkcjonalności serwera HTTP w aplikacjach.
Biblioteka obsługuje protokół HTTP 1.1, TLS, przetwarzanie przyrostowe żądań POST, uwierzytelnianie podstawowe i szyfrowane, IPv6, SHOUTcast oraz różne metody multipleksowania połączeń (select, poll, pthread, thread pool), aktualnie implementacja obsługuje różne obsługiwane platformy, w tym GNU/Linux, FreeBSD, OpenBSD, NetBSD, Solaris, Android , macOS, Win32, Symbian i z/OS.
GNU libmicrohttpd narodziło się z potrzeby jego autora, który w tamtym czasie potrzebował łatwego sposobu na dodanie współbieżnego serwera HTTP do innych projektów. Istniejące alternatywy były niewolne, nie wznawiane, samodzielne, o fatalnej jakości kodu lub ich kombinacją.
Charakterystyka które wyróżniają się w tej realizacji:
- Biblioteka C: szybka i mała
- API jest proste, ekspresyjne i całkowicie reentry.
- Implementacja jest zgodna z HTTP 1.1
- Serwer HTTP może nasłuchiwać na wielu portach
- Wiele trybów wątków: uruchamianie w wątku aplikacji, wątku wewnętrznym, puli wątków i wątku na połączenie
- Trzy różne tryby odpytywania gniazd: select (), poll () i epoll
- Minimalna liczba wywołań systemowych, aby uniknąć dodatkowych zmian trybu jądra/użytkownika
- Obsługiwane platformy to GNU / Linux, FreeBSD, OpenBSD, NetBSD, Android, Darwin (macOS), W32, OpenIndiana /
- Solaris i z / OS
- Wsparcie dla IPv6
- Wsparcie SHOUTcast
- Obsługa przyrostowego przetwarzania danych POST (opcjonalnie)
- Obsługa uwierzytelniania podstawowego i niejawnego (opcjonalnie)
- Obsługa TLS (wymaga libgnutls, opcjonalnie)
- Plik binarny ma tylko około 32k (bez obsługi TLS i innych opcjonalnych funkcji)
Główne nowe funkcje libmicrohttpd 0.9.74
W tej nowej wersji prezentowanej z biblioteki możemy znaleźć, że dodano eksperymentalną implementację protokołu WebSockets, który nie jest jeszcze dobrze przetestowany i jest domyślnie wyłączony.
Kolejną prezentowaną nowością jest to, że poprawiono zgodność ze specyfikacją implementacji protokołu HTTP 1.0/1.1Ponadto kod został przerobiony, aby dekodować pofragmentowane żądania.
Podkreśla się również, że dodany kod do automatycznego zwracania błędów związanych ze złymi chunkowanymi żądaniami, zbyt duży rozmiar danych i nieprawidłowe ustawienie nagłówka Content-Length.
To zostało zrealizowane optymalizacje wewnętrzne, na przykład ulepszone zarządzanie pamięcią, ulepszona wydajność mieszania i eliminacja powtarzalnego analizowania metody HTTP i wersji protokołu.
Należy również zauważyć, że zapewnia bardziej rygorystyczną walidację wartości nagłówka HTTP, zezwala na użycie znaku tabulacji w wartościach nagłówka odpowiedzi, ale zabrania używania spacji w niestandardowych wartościach nagłówka.
Poza tym, kod do generowania nagłówków HTTP w odpowiedzi został całkowicie przepisany a precyzja limitu czasu została zwiększona z sekund do milisekund.
Dodano opcję kompilacji –enable-sanitizers [= adres, niezdefiniowany, wyciek, trucizna użytkownika], aby selektywnie włączać tryby wykrywania problemów w kodzie.
Poprawiono, wyjaśniono, rozszerzono i ulepszono opisy funkcji Doxy, teraz wspominając, że nauka MHD powinna być o wiele łatwiejsza, po prostu czytając nagłówki.
Spośród innych zmian, które wyróżniają się w nowej wersji:
- Ulepszone opisy funkcji w pliku nagłówkowym microhttpd.h.
- Funkcje API dodaje MHD_get_reason_phrase_len_for () i MHD_create_response_from_buffer_with_free_callback_cls () MHD_CONNECTION_INFO_HTTP_STATUS flagi, MHD_get_connection_info (), jak również reakcje flag MHD_CONNECTION_INFO_HTTP_STATUS i reakcje MHD_SDRIVE_HDRFKE_HDR_HDRF_HDR_HDRF_HDRF_REND_HDRF_HDRF_REND_HDRF_HDR_RF_RF_HDR_RF_HDRF_.
- Dodano plik projektu do montażu w MSVC.
- Formacja nagłówka odpowiedzi została całkowicie przepisana. Nowa implementacja jest bardziej niezawodna, łatwiejsza w utrzymaniu i rozszerzalności oraz lepiej spełnia specyfikacje RFC HTTP.
- Poprawa wydajności: teraz wersja HTTP i metoda żądania są dekodowane tylko raz (wcześniej MHD używało wielu porównań ciągów)
W końcu jeśli chcesz dowiedzieć się więcej na ten temat o tym wydaniu możesz zapoznać się z podręcznikami użytkownika i innymi informacjami na jego stronie internetowej.