diff --git a/.cocoon-plan.md b/.cocoon-plan.md index 4a9559f..f51058c 100644 --- a/.cocoon-plan.md +++ b/.cocoon-plan.md @@ -64,13 +64,33 @@ - 当前仅做编译和测试验证,不添加新代码 ## 待办池(活跃) -1. ~~平滑加权轮询负载均衡~~ ✅ 2026-06-09 -2. **HTTP/2 代理支持** — 将反向代理接入 HTTP/2 流(当前仅 HTTP/1.1) -3. 虚拟主机 / 多站点 — 低优先级 -4. 主动健康检查 — 后台线程定期探测后端(当前为被动式) +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 时正确关闭连接而非归还 +3. **HTTP/2 代理流式转发** — 当前为非流式(先收集完整响应),未来改为流式 +4. 虚拟主机 / 多站点 — 低优先级 +5. 主动健康检查 — 后台线程定期探测后端(当前为被动式) ## 最近行动记录 +- 2026-06-09 09:00: **HTTP/2 反向代理支持** + - `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 后端转发 + - 请求重组:将 HTTP/2 伪头(:method, :path, :authority)重组为 HTTP/1.1 请求 + - 后端响应解析:解析 HTTP/1.1 响应头,通过 nghttp2 提交 HTTP/2 响应帧 + - 过滤 hop-by-hop 头(Connection, Transfer-Encoding 等) + - 添加 X-Forwarded-For 头 + - 支持 TLS 和非 TLS 后端连接(通过 `proxy_tls.c`) + - `server.c`: `handle_http2()` 中调用 `http2_session_set_proxy_config()` 注入配置 + - `http2.c`: 修复 `parse_http1_response()` 中 `body_len` 下溢问题(当 `len < blank + 4 - data` 时) + - `tests/integration_test.sh`: 新增 HTTP/2 代理集成测试(GET 请求验证) + - 编译零警告,142 单元测试全部通过 + - 集成测试:HTTP/2 GET 代理测试通过,POST 待完善(连接池 HTTP/1.0 兼容问题) + - 提交已推送 `main` (7fe52a3) + - 2026-06-09 06:00: **平滑加权轮询负载均衡** - `proxy.h`: 后端结构添加 `weight`(配置权重)和 `current_weight`(动态权重)字段 - `proxy.c`: 实现平滑加权轮询算法(Nginx SWW),`select_backend_sww()` + `select_backend_sww_all()`