cpp-httplib:一个头文件搞定 C++ HTTP/HTTPS 服务器与客户端

【免费下载链接】cpp-httplib A C++ header-only HTTP/HTTPS server and client library 【免费下载链接】cpp-httplib 项目地址: https://gitcode.com/GitHub_Trending/cp/cpp-httplib

写 C++ 程序时你常遇到一种两难:既要开一个 HTTP 接口给前端或别的程序调,又要让本程序去请求别家的 API,却不想为此引入整套框架和构建配置。cpp-httplib 就是为此做的 C++ HTTP 库——它把 HTTP/HTTPS 的服务器和客户端都装进单个 httplib.h,C++11 即可编译,#include 一行就能开写,服务器端和客户端能力是同一套 API。

⚡ 最快上手路径:零依赖,include 一行就够

这个库默认只依赖 C++11 标准库,不要求配置构建系统,也没有隐藏的依赖树要维护。最短的落地方式就是把 httplib.h 拷进工程目录,在源文件顶部 #include 进来再编译。只有在需要 HTTPS 时,才要在编译前定义对应的 TLS 宏并链接底层 TLS 库(下面细说)。换句话说,纯 HTTP 场景几乎没有任何配置成本,你改代码、重编译,就能跑。

下面这段代码注册了一个 GET 路由并让服务在 0.0.0.0:8080 上监听,访问 /hi 会返回一行文本:

#define CPPHTTPLIB_OPENSSL_SUPPORT
#include "httplib.h"

httplib::Server svr;
svr.Get("/hi", [](const httplib::Request&, httplib::Response& res) {
  res.set_content("Hello, world!", "text/plain");
});
svr.listen("0.0.0.0", 8080);

客户端侧同样简单,它向刚起的服务器发一个 GET 并打印状态码与响应体:

httplib::Client cli("http://localhost:8080");
if (auto res = cli.Get("/hi")) {
  std::cout << res->status << " " << res->body << "\n";
}

🔍 三个决定性的机制,先想清楚再选型

单文件 header-only:整个库就一个 httplib.h,你可以把它丢进 vendor/ 或 third_party/,没有第二个文件要跟着版本同步,升级也直接替换这一个文件。

TLS 后端三选一:启用 HTTPS 时按需定义 CPPHTTPLIB_OPENSSL_SUPPORT(要求 OpenSSL 3.0 及以上,链接 libssl、libcrypto);不想用 OpenSSL 可换成 CPPHTTPLIB_MBEDTLS_SUPPORT 或 CPPHTTPLIB_WOLFSSL_SUPPORT,各自对应不同的底层库。选哪个取决于你运行环境里已经装了什么。

阻塞式 I/O,且只到 HTTP/1.1:它走的是阻塞 socket,没有非阻塞事件模型,也未实现 HTTP/2 或 HTTP/3。高并发的短连接请求完全够用,但如果你要靠它扛十万级长连接,这不是合适的工具。

⚠️ 避坑指南:宏、跨平台与常见错误

macOS 系统证书:想让客户端直接用系统钥匙串里的证书,定义 CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN,就不用手动维护 CA 包了。

32 位平台不支持:官方明确不兼容 32 位目标,相关安全报告也不处理;如果你必须跑在 32 位环境,要自己承担风险。

客户端证书校验:生产环境建议 cli.set_ca_cert_path("./ca-bundle.crt") 指定自己的 CA 包;调试时可用 cli.enable_server_certificate_verification(false) 临时关闭,但上线前务必还原。

连接复用:keep-alive 默认最多 100 个连接、空闲 5 秒超时,长连接场景可用 set_keep_alive_timeout 调整,避免连接被提前回收。

📍 适合谁用,什么时候该换

它很适合快速原型、内部工具、给前端提供 REST 接口,以及在桌面或嵌入式程序里内置一个服务端。想往上做,WebSocket、Server-Sent Events、流式响应都有独立文档,可分别参考 README-websocket.md 与 README-sse.md:

cpp-httplib 驱动的 Web 应用界面,展示 HTTP 服务器返回的页面

需要放弃它的情形很明确:要 HTTP/2、非阻塞事件驱动,或者追求极限吞吐的超高并发网关——这类需求建议转向 Boost.Beast 或 Drogon 这类更偏底层的方案。一句话结论:如果你的目标是「用最少的代码,在 C++ 里同时拿到一个能用的 HTTP 服务器和客户端」,cpp-httplib 目前就是省心的那个选择。

【免费下载链接】cpp-httplib A C++ header-only HTTP/HTTPS server and client library 【免费下载链接】cpp-httplib 项目地址: https://gitcode.com/GitHub_Trending/cp/cpp-httplib

更多推荐