最近 GNU 项目发布了 图书馆的新版本 libmicrohttpd 0.9.74, 表示应用程序中内置 HTTP 服务器功能的简单 API。
图书馆 支持HTTP 1.1协议、TLS、POST请求增量处理, 基本和摘要认证、IPv6、SHOUTcast,以及多种连接复用方法(选择、轮询、pthread、线程池),目前实现支持各种支持平台,包括GNU/Linux、FreeBSD、OpenBSD、NetBSD、Solaris、Android 、macOS、Win32、Symbian 和 z/OS。
GNU libmicrohttpd 因作者的需要而诞生,当时他需要一种简单的方法将并发 HTTP 服务器添加到其他项目中。 现有的替代方案是非免费的、不可重入的、独立的、糟糕的代码质量,或者它们的组合。
的特点 在这个实现中脱颖而出:
- 库 C:又快又小
- API 简单、富有表现力且完全可重入。
- 实现符合 HTTP 1.1
- HTTP 服务器可以监听多个端口
- 多线程模式:在应用程序线程、内部线程、线程池和每个连接线程上运行
- 三种不同的socket轮询模式:select()、poll()和epoll
- 最少系统调用次数,以避免额外的内核/用户模式更改
- 支持的平台包括 GNU/Linux、FreeBSD、OpenBSD、NetBSD、Android、Darwin (macOS)、W32、OpenIndiana /
- Solaris 和 z/OS
- 支持IPv6
- SHOUTcast 支持
- 支持POST数据的增量处理(可选)
- 支持基本和隐式身份验证(可选)
- TLS 支持(需要 libgnutls,可选)
- 二进制文件只有大约 32k(没有 TLS 支持和其他可选功能)
libmicrohttpd 0.9.74 的主要新特性
在从库中提供的这个新版本中,我们可以发现 添加了 WebSockets 协议的实验性实现, 这还没有经过很好的测试,默认情况下是禁用的。
提出的另一个新颖之处是 改进了对 HTTP 1.0 / 1.1 协议实现规范的符合性此外,还重新编写了代码以解码碎片化的请求。
还强调了 添加了自动返回与坏块请求相关的错误的代码, 太大的数据大小和不正确的 Content-Length 标头设置。
已经实现 内部优化, 例如,改进内存管理,提高哈希效率,消除对 HTTP 方法和协议版本的重复解析。
还应注意的是,它提供了更严格的 HTTP 标头值验证,允许在响应标头值中使用制表符,但禁止在自定义标头值中使用空格。
除此之外, 在响应中生成 HTTP 标头的代码已完全重写 并且超时精度已从秒增加到毫秒。
添加了构建选项 –enable-sanitizers [= address、undefined、leak、user-poison] 以在代码中选择性地启用问题检测模式。
更正、澄清、扩展和改进了 Doxy 函数的描述,现在提到通过阅读标题应该更容易学习 MHD。
在此新版本中突出的其他更改包括:
- 改进了 microhttpd.h 头文件中的功能描述。
- 加入API函数MHD_get_reason_phrase_len_for()和MHD_create_response_from_buffer_with_free_callback_cls(),MHD_CONNECTION_INFO_HTTP_STATUS标志,MHD_get_connection_info(),以及MHD_CONNECTION_INFO_HTTP_STATUS标志响应和MHD_SDRIVE_HDRFKE_HDR_HDRF_HDR_HDRF_HDRF_REND_HDRF_HDRF_REND_HDRF_HDR_RF_RF_HDR_RF_HDRF_响应。
- 在 MSVC 中添加了用于组装的项目文件。
- 响应头的形成被完全重写。 新的实现更健壮,更易于维护和扩展,并且更好地遵循 RFC HTTP 规范。
- 性能改进:HTTP 版本和请求方法现在只解码一次(以前 MHD 使用许多字符串比较
最后 如果您有兴趣了解更多有关它的信息 关于此版本,您可以在其网站上查阅用户手册和其他信息。