PanLuvme/multithreaded-http-server

GitHub: PanLuvme/multithreaded-http-server

一个从零构建的C++20多线程HTTP/1.1服务器,集成WAF防护模块,适合学习网络编程底层原理和安全防御机制。

Stars: 0 | Forks: 0

# 多线程 HTTP 服务器 一个使用原始 POSIX 套接字、自定义线程池和集成 Web Application Firewall (WAF) 从零开始构建的高性能 HTTP/1.1 服务器(采用 C++20)。 ## 架构 ``` flowchart LR A["Client Request"] --> B["accept loop (main thread)"] B --> C["ThreadPool (N worker threads)"] C --> D["WAF Inspection"] D --> E["HTTP Parser"] E --> F["Router"] F --> G["Handler"] G --> H["HttpResponse"] H --> I["send() → Client"] D -->|BLOCK| J["403 Forbidden"] ``` ## 组件 ### ThreadPool 固定大小的 `std::thread` 工作线程池,从受 `std::mutex` 和 `std::condition_variable` 保护的共享 `std::queue` 中消费任务。任务通过 `enqueue()` 提交并按 FIFO 顺序执行。析构时优雅关闭。 ### HTTP Parser 将原始套接字数据解析为结构化的 `HttpRequest` 对象 —— 包含 method、path、version、headers(小写化)和 body。失败时返回 `valid` 标志和 `parse_error`。 ### Web Application Firewall (WAF) 在路由之前检查每一个请求。规则: | Rule ID | Category | Example | |---|---|---| | WAF-UA-001 | Blocked User-Agent | `sqlmap`, `nikto`, `nmap`, `dirbuster` | | WAF-SQL-002 | SQL Injection | `' OR '1'='1`, `; DROP TABLE` | | WAF-PATH-003 | Path Traversal | `../../etc/passwd` | | WAF-SIZE-004 | Oversized Body | Body > 1MB | | WAF-XSS-005 | Cross-Site Scripting | `