的單文件 C++ HTTP/HTTPS 庫(kù))
cpp-httplib三分鐘跑起來(lái)的單文件 C HTTP/HTTPS 庫(kù)【免費(fèi)下載鏈接】cpp-httplibA C header-only HTTP/HTTPS server and client library項(xiàng)目地址: https://gitcode.com/GitHub_Trending/cp/cpp-httplibcpp-httplib 是一個(gè) C11 單文件 HTTP/HTTPS 庫(kù)整個(gè)庫(kù)就是一個(gè)頭文件 httplib.h拷一份、include 一下你就同時(shí)擁有輕量級(jí) C HTTP 服務(wù)器與 HTTPS 客戶(hù)端還附帶 WebSocket 和 SSE。做應(yīng)用內(nèi) REST API 或小型后端服務(wù)不需要引入任何框架。 單文件頭文件與阻塞 I/O兩個(gè)刻意的取舍單文件設(shè)計(jì)是權(quán)衡出來(lái)的零構(gòu)建配置、倉(cāng)庫(kù)里只多一個(gè)文件、審計(jì)面小代價(jià)是任何 include 它的編譯單元都要完整重編譯編譯時(shí)間隨項(xiàng)目規(guī)模線(xiàn)性增長(zhǎng)。工具和中小服務(wù)劃算大型基礎(chǔ)設(shè)施團(tuán)隊(duì)通常還會(huì)再封一層。這個(gè) C HTTP 庫(kù)明確采用阻塞式 socket I/O且只實(shí)現(xiàn) HTTP/1.1。同步讀寫(xiě)的收益是線(xiàn)程模型好推理一個(gè)線(xiàn)程串行處理一個(gè)連接handler 寫(xiě)起來(lái)就是普通函數(shù)沒(méi)有回調(diào)和狀態(tài)機(jī)代價(jià)是并發(fā)連接數(shù)受線(xiàn)程數(shù)封頂你要維持幾萬(wàn)長(zhǎng)連接的話(huà)它不合適。線(xiàn)程池默認(rèn)max(8, 核數(shù) - 1)條線(xiàn)程高峰時(shí)動(dòng)態(tài)擴(kuò)到 4 倍空閑線(xiàn)程 3 秒后回收編譯期可用CPPHTTPLIB_THREAD_POOL_COUNT覆蓋。 三分鐘驗(yàn)證服務(wù)器與客戶(hù)端最小可運(yùn)行代碼這是最小服務(wù)器一個(gè) lambda 綁定 GET /hi監(jiān)聽(tīng)本地 8080。編譯運(yùn)行后任何客戶(hù)端請(qǐng)求都會(huì)拿到固定響應(yīng)零配置#include httplib.h httplib::Server svr; svr.Get(/hi, [](const httplib::Request , httplib::Response res) { res.set_content(Hello, cpp-httplib!, text/plain); }); svr.listen(127.0.0.1, 8080);客戶(hù)端代碼同樣短發(fā)一個(gè) GET能直接觀(guān)察到狀態(tài)碼和響應(yīng)體響應(yīng)是值類(lèi)型斷言友好httplib::Client cli(http://127.0.0.1:8080); if (auto res cli.Get(/hi)) { std::cout res-status res-body \n; }?? 能力邊界哪些場(chǎng)景它擅長(zhǎng)哪些場(chǎng)景繞道它的能力上限用場(chǎng)景清單來(lái)說(shuō)更準(zhǔn)確。它做得好的路由按方法 路徑匹配支持正則匹配與路徑參數(shù)提取。Multipart內(nèi)置multipart/form-data解析文件上傳不用自己處理 boundary。靜態(tài)文件set_mount_point()把 URL 映射到目錄set_file_extension_and_mimetype_mapping()定制 MIME。流接口ContentReceiver / ContentProvider 分塊收發(fā)內(nèi)容適合大體積與流式響應(yīng)??捎^(guān)測(cè)性日志與錯(cuò)誤處理器可替換handler 異常被捕獲不會(huì)拖垮進(jìn)程。它不適合的需要非阻塞 I/O 或 epoll 事件循環(huán)繞道——官方 README 開(kāi)頭就寫(xiě)明了阻塞模型。做超高并發(fā)網(wǎng)關(guān)、維持?jǐn)?shù)萬(wàn)連接繞道。必須支持HTTP/2 或 HTTP/3繞道它只有 HTTP/1.1。32 位平臺(tái)明確不受支持32 位目標(biāo)別用。?? 落地配置HTTPS 與靜態(tài)文件三個(gè)實(shí)戰(zhàn)細(xì)節(jié)落地前有三件事必須做對(duì)。HTTPS 靠宏開(kāi)啟。做什么在 include 前定義CPPHTTPLIB_OPENSSL_SUPPORT鏈接期掛上libssl與libcrypto要求 OpenSSL 3.0。為什么TLS 是宏可選特性沒(méi)裝 SSL 的機(jī)器也能編譯這個(gè)頭文件。注意define 必須寫(xiě)在 include 之前否則 HTTPS 靜默失效。macOS 直接用 KeyChain 證書(shū)。做什么macOS 構(gòu)建會(huì)自動(dòng)啟用CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN客戶(hù)端按系統(tǒng)證書(shū)庫(kù)驗(yàn)證。為什么不用在發(fā)布包里攜帶 CA 文件。注意該宏僅限 macOSiOS 上必須顯式set_ca_cert_path()。MIME 與路徑映射。做什么set_mount_point()映射 URL 前綴到目錄set_file_extension_and_mimetype_mapping()追加自定義擴(kuò)展名。為什么內(nèi)置 MIME 表只覆蓋常見(jiàn)類(lèi)型業(yè)務(wù)擴(kuò)展要自己注冊(cè)。注意動(dòng)態(tài)內(nèi)容別走靜態(tài)映射用路由 handler。細(xì)節(jié)可對(duì)照 example/server.cc、example/client.cc 與 README-stream.md。 快速選型五條用與不用五條規(guī)則對(duì)號(hào)入座。用應(yīng)用內(nèi)本地 REST API、內(nèi)部工具、請(qǐng)求量在百級(jí) QPS 的中小服務(wù)且單文件就能交付。用需要 HTTPS 加靜態(tài)文件托管又不想引入完整框架。不用連接數(shù)以萬(wàn)計(jì)的并發(fā)網(wǎng)關(guān)或長(zhǎng)連接樞紐。不用架構(gòu)依賴(lài)協(xié)程、非阻塞事件循環(huán)或必須 HTTP/2。不用32 位目標(biāo)平臺(tái)。如果你的需求就是跑起來(lái)就行的輕量級(jí) C HTTP 服務(wù)器git clone https://gitcode.com/GitHub_Trending/cp/cpp-httplib拷出 httplib.h10 行代碼拿回第一個(gè) HTTP 響應(yīng)。【免費(fèi)下載鏈接】cpp-httplibA C header-only HTTP/HTTPS server and client library項(xiàng)目地址: https://gitcode.com/GitHub_Trending/cp/cpp-httplib創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考