news 2026/9/10 14:28:58

30秒跑通C++ HTTP服务:cpp-httplib零依赖头文件上手

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
30秒跑通C++ HTTP服务:cpp-httplib零依赖头文件上手

30秒跑通C++ HTTP服务:cpp-httplib零依赖头文件上手

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

在C++里发个HTTP请求要扯上libcurl、OpenSSL、一堆CMake,你是不是也烦透了?cpp-httplib是个C++单头文件的HTTP/HTTPS服务端与客户端库,把httplib.h拷进项目就能用。

🚀 30秒跑起来:一个头文件的最小HTTP服务

这段代码做了两件事:注册一个GET路由,然后在8080端口起服务。

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

Linux/macOS下一行搞定:g++ -std=c++11 -pthread -o server server.cpp && curl http://localhost:8080

浏览器打开 http://localhost:8080 会看到一行纯文本 hello from cpp-httplib,说明服务已经在跑。Windows上用cl /EHsc server.cpp编译,效果一样。

基于cpp-httplib的LLM应用界面

它能干什么:从设备管理面板到微服务调用

给嵌入式设备加个Web管理面板

物联网设备想给工程师留个远程入口,传统做法要移植整个Web框架。cpp-httplib的做法是两行:一个挂载点托管静态页面,一个API路由控制设备。

svr.set_mount_point("/", "./web_ui"); svr.Post("/api/restart", [](const httplib::Request &, httplib::Response &res) { reboot_device(); res.status = 200; });

微服务之间互调HTTP

客户端和服务端在同一个库里。新建httplib::Client cli("http://user-service:8080"),调cli.Get("/users/123"),非空返回值的res->body就是响应体,错误码、请求头都能直接读。服务发现那套东西用不上时,这种写法比引入gRPC轻得多。

WebSocket实时推送

浏览器、设备要实时收数据时,不用单独引ws库。svr.WebSocket("/ws", ...)注册路由,回调里ws.read(msg)循环收消息、ws.send()回发,一个连接的生命周期就在回调里闭环。完整可跑的demo见 example/wsecho.cc。

同一应用的网页版界面

RESTful路由与路径参数

svr.Get("/users/:id", handler)注册带参数的路由,回调里req.path_params["id"]直接取到值,query参数、PUT/DELETE方法、multipart文件上传也都有一等公民的API,路由写法对做过Express的开发者来说没有认知成本。

跟crow比,cpp-httplib赢在哪

同为C++单文件头库,crow是最常被拿来对比的那一个。

维度cpp-httplibcrow
上手成本一个头文件+一个include,10行起服务也是单头文件,但要理解更多宏与类型
依赖数量零,HTTPS选装OpenSSL零,TLS同样依赖OpenSSL
平台覆盖Windows/Linux/macOSWindows/Linux/macOS
适用上限服务端+客户端一体,WebSocket/SSE/上传全带定位偏Web框架,只有服务端,不带HTTP客户端

说真的,判断标准很简单:只要你的需求里同时包含"我要发请求"和"我要接请求",cpp-httplib是默认答案;如果是要搭复杂路由、做框架化抽象的长周期服务端项目,crow更合适。

⚠️ 别踩这些坑:三个最常见的翻车点

默认线程模型不设上限→ 现象:高并发下每个连接一个线程,线程数和内存跟着请求数一起涨。解法:把svr.new_task_queue换成固定大小的ThreadPoolTaskQueue,一句话赋值的事。

HTTPS的编译开关→ 现象:用SSLServer编译直接报未定义符号,坑就在这。#define CPPHTTPLIB_OPENSSL_SUPPORT必须写在这个头文件的include之前,且项目里所有编译单元保持一致,链接时还得带上-lssl -lcrypto

请求体默认有大小上限→ 现象:上传超过默认限制的请求直接吃413,没有任何异常提示。用set_payload_max_length把上限调到你真实的最大文件体量,别沿用默认值。

一句话结论

cpp-httplib是C++里"快速起HTTP服务和客户端"这件事的默认解:零配置、单头文件,功能覆盖从原型到设备管理面板的量级,但不适合拿去做高并发压测级或强框架化的服务。现在就把httplib.h拖进项目,先写出那个10行的服务。

【免费下载链接】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 14:26:49

Filament 表格布局完全指南:从移动端堆叠到自定义行布局

Filament 表格布局完全指南:从移动端堆叠到自定义行布局 【免费下载链接】filament A powerful open-source UI framework for Laravel • Build and ship apps & admin panels fast with Livewire 项目地址: https://gitcode.com/GitHub_Trending/fi/filamen…

作者头像 李华