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 | `