Nedávno projekt GNU vydal vydanie novú verziu knižnice libmicrohttpd 0.9.74, A predstavujúce jednoduché API pre vstavanú funkčnosť HTTP servera v aplikáciách.
Knižnica podporuje protokol HTTP 1.1, TLS, prírastkové spracovanie požiadaviek POST, základná a digestívna autentifikácia, IPv6, SHOUTcast a rôzne metódy pre multiplexovanie pripojení (select, poll, pthread, thread pool), v súčasnosti má implementácia podporu pre rôzne podporované platformy, vrátane GNU / Linux, FreeBSD, OpenBSD, NetBSD, Solaris, Android , macOS, Win32, Symbian a z / OS.
GNU libmicrohttpd sa zrodil kvôli potrebe jeho autora, ktorý v tom čase potreboval jednoduchý spôsob, ako pridať súbežný HTTP server do iných projektov. Existujúce alternatívy boli neslobodné, neopakovateľné, samostatné, s hroznou kvalitou kódu alebo ich kombinácia.
Z charakteristík ktoré sa vyznačujú touto implementáciou:
- Knižnica C: rýchla a malá
- API je jednoduché, expresívne a úplne reentry.
- Implementácia je v súlade s HTTP 1.1
- HTTP server môže počúvať na viacerých portoch
- Režimy viacerých vlákien: Spustenie na aplikačnom vlákne, internom vlákne, oblasti vlákien a vlákne na pripojenie
- Tri rôzne režimy soketového dotazovania: výber (), dotazovanie () a epoll
- Minimálny počet systémových volaní, aby sa predišlo ďalším zmenám v režime jadra/používateľa
- Podporované platformy zahŕňajú GNU / Linux, FreeBSD, OpenBSD, NetBSD, Android, Darwin (macOS), W32, OpenIndiana /
- Solaris a z / OS
- Podpora protokolu IPv6
- Podpora SHOUTcast
- Podpora prírastkového spracovania údajov POST (voliteľné)
- Podpora základnej a implicitnej autentifikácie (voliteľné)
- Podpora TLS (vyžaduje libgnutls, voliteľné)
- Binárna veľkosť je len asi 32 kB (bez podpory TLS a ďalších voliteľných funkcií)
Hlavné nové funkcie libmicrohttpd 0.9.74
V tejto novej verzii knižnice to nájdeme pridaná experimentálna implementácia protokolu WebSockets, ktorý ešte nie je dobre otestovaný a je predvolene vypnutý.
Ďalšou novinkou, ktorá je predstavená, je to zlepšila sa zhoda s implementačnými špecifikáciami protokolu HTTP 1.0 / 1.1Okrem toho bol kód prepracovaný na dekódovanie fragmentovaných požiadaviek.
Je tiež zdôraznené, že pridaný kód na automatické vracanie chýb súvisiacich so zle rozdelenými požiadavkami, príliš veľká veľkosť údajov a nesprávne nastavenie hlavičky Content-Length.
Bolo to zrealizované interné optimalizácie, napríklad zlepšená správa pamäte, zlepšená efektivita hash a eliminácia opakovaného analyzovania metódy HTTP a verzie protokolu.
A tiež je potrebné poznamenať, že poskytla prísnejšie overenie hodnôt hlavičky HTTP, umožnila použitie znaku tabulátora v hodnotách hlavičky odpovede, ale zakázala používanie medzier v hodnotách vlastných hlavičiek.
Okrem toho, kód na generovanie hlavičiek HTTP ako odpoveď bol úplne prepísaný a presnosť časového limitu sa zvýšila zo sekúnd na milisekúndy.
Pridaná možnosť zostavenia –enable-sanitizers [= adresa, nedefinované, únik, používateľská otrava] na selektívne povolenie režimov detekcie problémov v kóde.
Opravené, spresnené, rozšírené a vylepšené popisy funkcií Doxy, pričom sa teraz uvádza, že by malo byť oveľa jednoduchšie naučiť sa MHD len čítaním nadpisov.
Z ďalších zmien, ktoré vynikajú v tejto novej verzii:
- Vylepšené popisy funkcií v hlavičkovom súbore microhttpd.h.
- pridané funkcie API MHD_get_reason_phrase_len_for () a MHD_create_response_from_buffer_with_free_callback_cls (), MHD_CONNECTION_INFO_HTTP_STATUS vlajky, MHD_get_connection_info (), ako aj odpovede MHD_CONNECTION_INFO_HTTP_STATUS vlajky a odpovede MHD_SDRIVE_HDRFKE_HDR_HDRF_HDR_HDRF_HDRF_REND_HDRF_HDRF_REND_HDRF_HDR_RF_RF_HDR_RF_HDRF_.
- Pridaný projektový súbor pre montáž v MSVC.
- Formácia hlavičky odpovede bola úplne prepísaná. Nová implementácia je robustnejšia, ľahšie sa udržiava a rozšíri a lepšie spĺňa špecifikácie RFC HTTP.
- Vylepšenia výkonu: Verzia HTTP a metóda požiadavky sa teraz dekódujú iba raz (predtým MHD používal mnoho porovnávaní reťazcov
Konečne ak máte záujem dozvedieť sa o tom viac o tejto verzii si môžete prečítať používateľské príručky a ďalšie informácie na jej webovej lokalite.