GNU libmicrohttpd 0.9.74 已经发布,这些是它的新闻

最近 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 使用许多字符串比较

最后 如果您有兴趣了解更多有关它的信息 关于此版本,您可以在其网站上查阅用户手册和其他信息。

链接是这个。