news 2026/9/10 8:43:48

cpp-httplib:1 个头文件里的完整 C++ HTTP/HTTPS 库

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
cpp-httplib:1 个头文件里的完整 C++ HTTP/HTTPS 库

cpp-httplib:1 个头文件里的完整 C++ HTTP/HTTPS 库

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

想给 C++ 程序加个 Web 界面,却不想引入一整个框架和构建系统?cpp-httplib 是一个单文件的 C++11 HTTP/HTTPS 库,1 个头文件里同时给了你服务器和客户端。

🧩 一句话定位:从头文件到第一次响应只要 3 分钟

它把"能对外提供 HTTP/HTTPS 服务"和"能主动发 HTTP/HTTPS 请求"两件事塞进一个头文件,无需链接库,也没有配置文件要写。

手头没有仓库的话,执行git clone https://gitcode.com/GitHub_Trending/cp/cpp-httplib,或者只把其中的httplib.h拷进项目目录即可。

#include "httplib.h" int main() { httplib::Server svr; svr.Get("/", [](const httplib::Request &, httplib::Response &res) { res.set_content("Hello, World!", "text/plain"); }); svr.listen("0.0.0.0", 8080); }

存成 server.cpp,用g++ -std=c++17 -pthread -o server server.cpp编译运行,浏览器访问 http://localhost:8080 就能看到 Hello, World!。

🗺️ 能力地图:它能做什么

开启 HTTPS 只需 1 个宏,WebSocket 和 SSE 开箱即用

  • HTTP/1.1 服务器与客户端一体,路由就是注册一个 lambda
  • #include前加一个#define就能启用 TLS,OpenSSL、Mbed TLS、wolfSSL 三种后端可选
  • WebSocket 双向通信、SSE 单向推送都有实现,客户端侧的 SSE 还自带自动重连
  • 分块上传下载、multipart 表单解析、静态目录托管,都是现成 API
#define CPPHTTPLIB_OPENSSL_SUPPORT // 或 Mbed TLS / wolfSSL 对应宏 #include "httplib.h" httplib::SSLServer svr("./cert.pem", "./key.pem");

单文件放进去,线程池与优雅退出直接可用

  • C++11 起步即可编译,GCC、Clang、MSVC 全支持,Windows / Linux / macOS 均可
  • 内置 ThreadPool 处理并发请求,用new_task_queue调整线程数
  • stop()会等在手请求处理完再退出,适合做信号驱动的优雅关闭
  • set_pre_routing_handler提供统一钩子,做鉴权、日志这类前置处理
svr.new_task_queue = [] { return new httplib::ThreadPool(8, 128); }; svr.set_mount_point("/", "./web"); // 静态文件目录 // 退出前调用 svr.stop() 优雅关闭

更多写法和踩坑记录可以看 示例代码集合。

🛠️ 真实项目走查:本地翻译工具与自托管管理面板

场景一:把本地 LLM 包成团队能用的翻译工具。背景是把 llama.cpp 模型包成一个翻译服务,前端不用 Node,浏览器直接访问。仓库文档里有一篇教程分 6 章走完"REST API → SSE 流式输出 → Web UI → 桌面应用",见 LLM 应用教程。核心代码只有接口这一层:

svr.Post("/translate", [](const httplib::Request &req, httplib::Response &res) { auto input = json::parse(req.body, nullptr, false); if (input.is_discarded()) { res.status = 400; return; } auto text = input["text"].get<std::string>(); res.set_content(json{{"translation", llm.chat(text)}}.dump(), "application/json"); });

这样前后端共用同一个 C++ 进程,最终打包出来就是一个可执行文件,分发时不用带任何运行时。

场景二:自托管文件服务器的管理面板。背景是一台架在公司局域网里的小文件服务器,需要一个既能浏览文件、又能查服务状态的 Web 面板,且不想额外引入前端构建链:

httplib::Server svr; svr.set_mount_point("/", "./www"); // 静态文件浏览 svr.Get("/api/health", [](const httplib::Request &, httplib::Response &res) { res.set_content(R"({"status":"ok"})", "application/json"); }); svr.listen("127.0.0.1", 9090);

好处是管理面板和文件服务合在一个进程里,资源受限的嵌入式设备、NAS 上跑起来也很轻,用 cpp-httplib 搭建嵌入式 Web 界面基本就是这种形态。

⚖️ 选型参考与避坑指南:适合谁,坑在哪

适合你,如果你:

  • 想给 C++ 工具或 CLI 加一个管理界面 / 本地 API
  • 在设备或自托管服务里内嵌 Web 界面,产物希望尽量小
  • 需要 C++ 程序主动发 HTTP 请求,作为调用外部服务的客户端
  • 在找 cpp-httplib 单文件 头文件 使用方式,或想替代 Boost.Beast 多文件、难上手的集成成本

不适合你,如果你:

  • 要写高并发流量入口网关——它是阻塞式 I/O,一条连接占一个线程
  • 业务必须走 HTTP/2 或 HTTP/3——这里只有 HTTP/1.1
  • 目标是 32 位平台——README 明确声明不支持,不建议冒险

三个真实存在的坑:

  1. 长连接业务会占住工作线程:SSE、WebSocket 每个连接都挂着一个线程,并发高时必须用new_task_queueThreadPool(小值, 大值)做弹性扩缩。
  2. 单个头文件约 2.2 万行、770KB 左右:多个编译单元都包含它时编译时间会明显变长,建议把服务器逻辑隔离到一个编译单元,或启用预编译头。
  3. TLS 后端行为不一致:OpenSSL 要求 3.0 以上;Mbed TLS / wolfSSL 下 CA 证书枚举只反映load_ca_cert_store()加载的部分;BoringSSL 仅为尽力支持,可能随上游 API 变动。

这个库基于阻塞 socket I/O、仅支持 HTTP/1.1,README 把这条边界放在了最前面——接受这一点的话,它基本是 C++ 代码通往可用 Web 界面最短的路径之一。

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

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 8:43:04

老设备还能不能 root:KernelSU 非 GKI 内核适配完整指南

老设备还能不能 root&#xff1a;KernelSU 非 GKI 内核适配完整指南 【免费下载链接】KernelSU A Kernel based root solution for Android 项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU KernelSU 是个跑在内核模式里的 Android root 方案&#xff0c;靠…

作者头像 李华
网站建设 2026/9/10 8:43:00

两轮平衡车ADRC控制实战:从MATLAB仿真到STM32部署

简介&#xff1a;本资源是一套基于自抗扰控制&#xff08;ADRC&#xff09;算法实现的两轮自平衡车MATLAB仿真与嵌入式联合开发方案&#xff0c;面向自动控制、机器人学及智能车方向的本科生、研究生与工程实践者&#xff0c;解决经典倒立摆系统建模、控制器设计与实时闭环控制…

作者头像 李华
网站建设 2026/9/10 8:40:19

5分钟跑通 Tracy Profiler:精准定位帧时间毛刺的元凶

5分钟跑通 Tracy Profiler&#xff1a;精准定位帧时间毛刺的元凶 【免费下载链接】tracy Frame profiler 项目地址: https://gitcode.com/GitHub_Trending/tr/tracy 你有没有遇到过&#xff1a;程序每十几秒卡顿一次&#xff0c;等打开事后采样工具时&#xff0c;现场早…

作者头像 李华
网站建设 2026/9/10 8:39:59

基于JSP的Java植物科普网站毕业设计:从需求到答辩完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华