Faz pouco o projeto GNU lançou o lançamento de a nova versão da biblioteca libmicrohttpd 0.9.74, Um que representa uma API simples para funcionalidade de servidor HTTP integrada em aplicativos.
A biblioteca suporta protocolo HTTP 1.1, TLS, processamento incremental de solicitação POST, autenticação básica e digest, IPv6, SHOUTcast, e vários métodos de multiplexação de conexões (select, poll, pthread, thread pool), atualmente a implementação tem suporte para várias plataformas suportadas, incluindo GNU/Linux, FreeBSD, OpenBSD, NetBSD, Solaris, Android , macOS, Win32, Symbian e z/OS.
O GNU libmicrohttpd nasceu da necessidade de seu autor, que na época precisava de uma maneira fácil de adicionar um servidor HTTP concorrente a outros projetos. As alternativas existentes eram não livres, não reentrantes, independentes, qualidade de código terrível ou uma combinação delas.
Das características que se destacam nesta implementação:
- Biblioteca C: rápida e pequena
- A API é simples, expressiva e totalmente reentrada.
- A implementação é compatível com HTTP 1.1
- O servidor HTTP pode escutar em várias portas
- Vários modos de threading: Executar em thread de aplicativo, thread interno, pool de threads e thread por conexão
- Três modos de polling de soquete diferentes: select (), poll () e epoll
- Número mínimo de chamadas do sistema para evitar alterações adicionais de kernel/modo de usuário
- As plataformas suportadas incluem GNU / Linux, FreeBSD, OpenBSD, NetBSD, Android, Darwin (macOS), W32, OpenIndiana /
- Solaris ez/OS
- Suporte para IPv6
- Suporte para SHOUTcast
- Suporte para processamento incremental de dados POST (opcional)
- Suporte para autenticação básica e implícita (opcional)
- Suporte TLS (requer libgnutls, opcional)
- O binário tem apenas cerca de 32k (sem suporte a TLS e outros recursos opcionais)
Principais novidades da libmicrohttpd 0.9.74
Nesta nova versão da biblioteca podemos encontrar que adicionou uma implementação experimental do protocolo WebSockets, que ainda não foi bem testado e está desabilitado por padrão.
Outra novidade que se apresenta é que a conformidade com as especificações de implementação do protocolo HTTP 1.0 / 1.1 foi aprimoradaAlém disso, o código foi retrabalhado para decodificar solicitações fragmentadas.
Destaca-se também que código adicionado para retornar automaticamente erros relacionados a solicitações fragmentadas incorretas, tamanho de dados muito grande e configuração de cabeçalho Content-Length incorreta.
Foi realizado otimizações internas, por exemplo, gerenciamento de memória aprimorado, eficiência de hash aprimorada e eliminação da análise repetitiva do método HTTP e da versão do protocolo.
E nota-se também que forneceu uma validação mais rigorosa dos valores do cabeçalho HTTP, permitiu o uso de um caractere de tabulação nos valores do cabeçalho de resposta, mas proibiu o uso de espaços nos valores do cabeçalho personalizado.
Além disso, o código para gerar cabeçalhos HTTP em resposta foi completamente reescrito e a precisão do tempo limite foi aumentada de segundos para milissegundos.
Adicionada opção de compilação –enable-sanitizers [= endereço, indefinido, vazamento, veneno do usuário] para habilitar seletivamente os modos de detecção de problemas no código.
Corrigido, esclarecido, ampliado e melhorado as descrições das funções Doxy, agora mencionando que deveria ser muito mais fácil aprender MHD apenas lendo os títulos.
Das outras mudanças que se destacam nesta nova versão:
- Descrições de função aprimoradas no arquivo de cabeçalho microhttpd.h.
- funções de API adicionada MHD_get_reason_phrase_len_for () e MHD_create_response_from_buffer_with_free_callback_cls (), bandeira MHD_CONNECTION_INFO_HTTP_STATUS, MHD_get_connection_info (), bem como respostas bandeira MHD_CONNECTION_INFO_HTTP_STATUS, e respostas MHD_SDRIVE_HDRFKE_HDR_HDRF_HDR_HDRF_HDRF_REND_HDRF_HDRF_REND_HDRF_HDR_RF_RF_HDR_RF_HDRF_.
- Adicionado arquivo de projeto para montagem no MSVC.
- A formação do cabeçalho de resposta foi completamente reescrita. A nova implementação é mais robusta, mais fácil de manter e expansível e segue melhor as especificações HTTP da RFC.
- Melhorias de desempenho: agora a versão HTTP e o método de solicitação são decodificados apenas uma vez (anteriormente o MHD usava muitas comparações de strings
Finalmente se você estiver interessado em saber mais sobre isso sobre este lançamento, você pode consultar os manuais do usuário e outras informações em seu site.