Il progetto GNU ha pubblicato la versione 1.0.0 della libreria libmicrohttpd, che segna il primo rilascio stabile dopo 16 anni dalla sua creazione. La libreria è scritta in C e offre un'API semplice per integrare le funzionalità di un server HTTP nelle applicazioni. Le piattaforme supportate includono: GNU/Linux, FreeBSD, OpenBSD, NetBSD, Solaris, Android, macOS, Win32 e z/OS. Il codice è distribuito sotto licenza LGPL 2.1+. Durante la compilazione, la libreria occupa circa 200 KB, mentre in modalità di compilazione minimale si riduce a 32 KB. Nelle dipendenze viene utilizzata solo libc, e libgnutls in caso di compilazione opzione con supporto TLS.
La libreria supporta il protocollo HTTP 1.1, TLS, l'elaborazione incrementale delle richieste POST, l'accettazione delle connessioni su più porte di rete, l'autenticazione basic e digest, IPv6, SHOUTcast, diversi metodi di multiplexing delle connessioni (select, poll, epoll) e modelli di multithreading (ad esempio, è possibile utilizzare un pool di thread o un thread per connessione). Per ridurre il sovraccarico causato dal passaggio di contesto tra il kernel e lo spazio utente, il numero di chiamate di sistema durante il funzionamento è stato minimizzato. La sicurezza della base di codice di libmicrohttpd è stata confermata da audit condotti dalle aziende Mozilla e Red Hat.
Le modifiche più significative rispetto alla precedente versione:
- È stato riscritto e riportato a conformità totale ai requisiti RFC 9110 e 9112 il codice per l'analisi delle richieste client. Sono stati forniti modi rigorosi e morbidi di conformità alle specifiche per bilanciare la compatibilità con una maggiore sicurezza.
- È stata rivisitata l'implementazione dell'autenticazione digest, con un significativo ampliamento del supporto per le funzionalità presenti nell'RFC 7617. Inclusi il supporto per SHA-512, userhash e username in notazione estesa. È stato inoltre mantenuto il supporto per il vecchio RFC 2069 e la possibilità di utilizzare gli hash MD5 e SHA-256.
- Migliorato il funzionamento in ambienti multithreading e in modalità di polling dei socket.
- È stata ristrutturata l'implementazione dell'autenticazione basic, per la quale sono state proposte funzioni aggiuntive nell'ABI.
- Il codice per l'inizializzazione di GnuTLS è stato ristrutturato. È stata aggiunta la possibilità di utilizzare sia la configurazione di GnuTLS di base sia quella specifica per libmicrohttpd, nonché il supporto per la ridefinizione di singole impostazioni della configurazione di GnuTLS.
In futuro si prevede di sviluppare la branca libmicrohttpd 2, che garantirà supporto per i protocolli HTTP/2 e HTTP/3, e di semplificare l'API e il supporto per diversi backend per TLS. L'inizio dei lavori su questa nuova branca sarà finanziato dal fondo Sovereign, istituito in Germania per promuovere lo sviluppo di infrastrutture digitali aperte e ecosistemi open source.
Fonte: opennet.ru
