docs(plan): 更新计划,标记连接池 HTTP/1.0 兼容完成

- 待办池:连接池 HTTP/1.0 兼容 → 
- 测试数:93 → 99 项
- 添加 2026-06-09 12:00 行动记录
This commit is contained in:
xfy911 2026-06-09 12:36:58 +08:00
parent 90601e0f67
commit 8516261d34

View File

@ -60,22 +60,37 @@
- 所有 Phase 1-4 核心功能已完成(反向代理负载均衡 + Prometheus 指标已加入)
- 编译通过,零警告
- **142 个单元测试全部通过** + **93 项集成测试全部通过**(新增 3 项加权轮询测试
- **142 个单元测试全部通过** + **99 项集成测试全部通过**(新增 6 项 HTTP/1.0 兼容 + 配置合并修复
- 当前仅做编译和测试验证,不添加新代码
## 待办池(活跃)
1. ~~HTTP/2 代理支持~~ ✅ 2026-06-09
- HTTP/2 流通过 nghttp2 转发到 HTTP/1.1 后端
- GET 请求测试通过POST 基础支持
- 已知限制:连接池对 HTTP/1.0 后端(无 keep-alive处理需完善
2. **连接池 HTTP/1.0 兼容** — 后端发送 Connection: close 时正确关闭连接而非归还
2. ~~连接池 HTTP/1.0 兼容~~ ✅ 2026-06-09
- 后端发送 Connection: close 时正确关闭连接而非归还
3. **HTTP/2 代理流式转发** — 当前为非流式(先收集完整响应),未来改为流式
4. 虚拟主机 / 多站点 — 低优先级
5. 主动健康检查 — 后台线程定期探测后端(当前为被动式)
## 最近行动记录
- 2026-06-09 09:00: **HTTP/2 反向代理支持**
- 2026-06-09 12:00: **连接池 HTTP/1.0 兼容 + 配置合并 bug 修复**
- `proxy.c`: `proxy_relay_backend()` 中新增 `connection_closed` 标志
- 当 `recv() == 0`(后端关闭连接)时标记 `connection_closed = true`
- 归还条件改为 `success && total > 0 && !connection_closed`,避免归还已关闭连接
- `http2.c`: `http2_serve_proxy()` 中检测 HTTP/1.0 响应
- `is_http10 = strncmp(response_buf, "HTTP/1.0", 8) == 0`
- HTTP/1.0 默认关闭连接,除非显式 `Connection: keep-alive`
- 修复 HTTP/2 代理复用 HTTP/1.0 后端已关闭连接导致响应失败的问题
- `main.c`: 重写 `parse_args()` 参数解析逻辑
- 问题:`config_merge(config, config, ...)``base == cmdline``free(base->tls_cert)``strdup(cmdline->tls_cert)` 导致 use-after-free
- 修复:先加载配置文件,再解析命令行参数(覆盖配置文件),避免 `config_merge` 自引用
- `tests/http10_backend.py`: 新增 HTTP/1.0 后端模拟器
- 模拟发送 `Connection: close` 后主动关闭连接的后端
- 用于验证连接池正确处理已关闭连接
- `tests/integration_test.sh`: 新增 HTTP/1.0 后端兼容测试3 项)
- 第一次请求 200、第二次请求 200必须新建连接、连接管理日志检测
- 编译零警告142 个单元测试 + 99 项集成测试全部通过
- 提交 `90601e0` 已推送到 `main`
- `http2.h`: `http2_session_t` 新增 `proxy_config``client_addr` 字段
- `http2.c`: 新增 `http2_session_set_proxy_config()` 注入代理配置
- `http2.c`: 新增 `http2_serve_proxy()` 函数,实现 HTTP/2 流 → HTTP/1.1 后端转发