diff --git a/.cocoon-plan.md b/.cocoon-plan.md index f51058c..9304853 100644 --- a/.cocoon-plan.md +++ b/.cocoon-plan.md @@ -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 后端转发