docs(plan): 更新 HTTP/2 完成状态,调整待办优先级

This commit is contained in:
xfy911 2026-06-04 15:47:16 +08:00
parent 22c9f74e76
commit 88c6597748

View File

@ -22,20 +22,21 @@
- [x] 分级日志系统error / warn / info / debug✅ 2026-06-03
- [x] Gzip 压缩 ✅ 2026-06-03已接入响应流程
- [x] Brotli 压缩 ✅ 2026-06-04优先于 Gzip
- [x] 集成测试 suite37 项 curl/bash 测试全部通过)✅ 2026-06-04
- [x] 集成测试 suite45 项 curl/bash 测试全部通过)✅ 2026-06-04
- [x] 性能基准wrk: ~16.2K RPS / ~60μs 延迟)✅ 2026-06-03
- [x] 请求体解析POST 支持)✅ 2026-06-03
- Content-Length 读取
- JSON / form-urlencoded 回显
- **multipart/form-data 文件上传**(保存到 root_dir/uploads/)✅ 2026-06-04
- [x] C 语言单元测试框架 ✅ 2026-06-03Unity 框架125 个测试全部通过)
- [x] C 语言单元测试框架 ✅ 2026-06-03Unity 框架127 个测试全部通过)
### Phase 3 — 扩展
- [x] **配置文件支持** — JSON 配置替代纯命令行 ✅ 2026-06-04
- [x] **Brotli 压缩** — 比 gzip 更高压缩率 ✅ 2026-06-04
- [x] **HTTPS / TLS** — OpenSSL Memory BIO 集成,支持命令行与配置文件启用 ✅ 2026-06-04
- [x] **HTTP/2** — nghttp2 骨架 + server.c 集成TLS ALPN 协商),待静态文件服务接入 ✅ 2026-06-04
- [x] **HTTP/2** — nghttp2 完整实现TLS ALPN 协商 + 静态文件服务 + 缓存)✅ 2026-06-04
- [ ] Windows 兼容性
- [ ] h2c 升级支持 — 明文 HTTP/2 升级PRI 方法 + 魔术字)
### Phase 4 — 生态
- [ ] WebSocket 支持
@ -45,24 +46,48 @@
## 当前状态
- 编译通过,零警告(除 coco 子模块的 linker .note.GNU-stack 提示)
- **39 项集成测试全部通过**GET/HEAD/POST/404/Range/304/gzip/brotli/MIME/目录浏览/路径防护/文件上传/TLS握手/HTTPS响应
- **127 个单元测试全部通过**Unity 框架1 个忽略),新增 2 个 TLS 集成测试
- **45 项集成测试全部通过**(新增 6 项 HTTP/2 测试ALPN 协商、GET、HEAD、404、缓存
- **127 个单元测试全部通过**Unity 框架1 个忽略)
- 压测数据wrk -t4 -c100 -d10s → 16,179 RPS平均延迟 59.86μs
- POST 支持JSON 和 form-urlencoded 回显multipart 文件上传Content-Length 解析8MB 上限
- **配置文件支持**JSON 格式8 个字段,命令行参数可覆盖
- **TLS/HTTPS**OpenSSL 3.0 Memory BIO + coco 协程集成自签名证书支持sendfile 降级为缓冲读写
- **HTTP/2**nghttp2 骨架 + server.c 集成TLS ALPN 协商静态文件服务待接入h2c 升级待实现
- **TLS/HTTPS**OpenSSL 3.0 Memory BIO + coco 协程集成自签名证书支持ALPN 协商 h2/http1.1
- **HTTP/2**
- 基于 nghttp2 的完整会话管理431 行)
- TLS ALPN 自动协商 h2
- 静态文件服务GET/HEAD、路径安全、ETag、304 Not Modified
- HEAD 请求正确处理(无 body
- 目录自动 fallback 到 index.html
- 路径遍历防护(.. 检查)
- 文件内容通过 nghttp2_data_provider 流式传输
- 修复 send_callback 返回值 bugsend_all 返回 0 而非已发送字节数)
- 修复 :path 伪头长度解析 bug4→5和路径空终止问题
## 待办池
1. **[高] HTTP/2 静态文件服务接入** — 将 static_serve_file 接入 nghttp2 流回调
2. **[高] h2c 升级支持** — 明文 HTTP/2 升级PRI 方法 + 魔术字)
3. **[中] Windows 兼容性** — 平台抽象层platform.h / platform.c
4. **[中] Doxygen 中文注释** — 所有模块的公共 API 需要完整文档
5. **[低] 检查远程更新内容** — 上游有 new commits需 review 9041d8d
1. **[中] h2c 升级支持** — 明文 HTTP/2 升级PRI 方法 + 魔术字server.c 读取前几个字节检测
2. **[中] Windows 兼容性** — 平台抽象层platform.h / platform.csendfile 替代方案io_uring 替代方案
3. **[中] Doxygen 中文注释** — 所有模块的公共 API 需要完整文档http2.c 已部分完成)
4. **[低] 检查远程更新内容** — 上游有 new commits需 review 9041d8d
5. **[低] HTTP/2 动态压缩** — 在 HTTP/2 响应中支持 gzip/brotli 压缩(当前未启用)
6. **[低] HTTP/2 目录浏览** — 目前返回 404可考虑支持目录列表
## 最近行动记录
- **2026-06-04: 本轮行动 — HTTP/2 静态文件服务 + ALPN 修复**
- http2.c: 实现完整的 HTTP/2 静态文件服务GET/HEAD、路径安全、ETag、304 缓存)
- http2.c: 修复 :path 伪头长度解析 bug4→5和路径空终止问题
- http2.c: 修复 send_callback 返回值 bugsend_all 返回 0 而非已发送字节数,导致 nghttp2 重试死循环)
- http2.c: 添加 If-None-Match / If-Modified-Since 缓存头解析到 nghttp2 头回调
- http2.h: 扩展 http2_session_t 结构体,添加 root_dir/gzip/brotli 字段
- http2.h: 新增 http2_session_set_context() 接口
- server.c: 在 handle_http2() 中调用 set_context 传入连接配置
- tls.c: 实现 ALPN 选择回调tls_alpn_select_cb优先协商 h2 次选 http/1.1
- tls.c: 修正 ALPN 协议格式解析(长度前缀字符串序列)
- tests/integration_test.sh: 新增 6 项 HTTP/2 集成测试ALPN 协商、GET、HEAD、404、缓存
- 编译通过,零警告(除 coco 子模块 linker 提示)
- 45 项集成测试全部通过127 个单元测试全部通过
- 推送到 main22c9f74
- **2026-06-04: 本轮行动 — HTTP/2 骨架 + server.c 集成**
- 新增 `http2.c` / `http2.h`:基于 nghttp2 的 HTTP/2 会话管理431 行)
- 修复编译:匹配 `http_request_t` 结构,使用 `log_error` 替代 `LOG_ERROR`
@ -73,7 +98,6 @@
- Makefile加入 `http2.c`、链接 `-lnghttp2`
- 编译通过39 项集成测试 + 127 单元测试全部通过
- 推送到 main
- **待完成**HTTP/2 静态文件服务接入nghttp2 流回调、h2c 升级
- **2026-06-04: 本轮行动 — 实现 TLS/HTTPS 支持**
- 新增 `tls.c` / `tls.h`OpenSSL 3.0 Memory BIO 与 coco 协程 I/O 集成
- `cocoon.h`:新增 `tls_enabled`, `tls_cert`, `tls_key` 配置字段
@ -87,19 +111,7 @@
- `tests/unit/test_config.c`:更新 `config_merge` 测试签名
- 单元测试127 个通过1 忽略集成测试39 个通过(含 2 个 TLS 测试)
- 推送到 main
- **2026-06-04: 本轮行动 — 修复拼写错误 + 扩展 server 单元测试17 个)**
- `cocoon.h``COCOONForbidden``COCOON_FORBIDDEN`(统一下划线命名)
- `test_server.c`:从 5 个测试扩展到 17 个
- 空 root_dir 边界测试
- port=0系统分配和 port=65535 边界测试
- 多线程配置 + workers=0 自动检测测试
- timeout / max_connections 配置测试
- gzip/brotli 压缩标志测试
- stop → destroy 生命周期测试
- 多实例创建测试
- `server_start(NULL)` 参数校验测试
- 单元测试125 个全部通过集成测试37 项全部通过
- 推送到 mainrebase 了远程更新 9041d8d
- 2026-06-04: 修复拼写错误 + 扩展 server 单元测试17 个)
- 2026-06-04: Brotli 压缩支持(优先于 Gzip
- 2026-06-04: 配置文件支持 + gzip_enabled 控制 + README 修正
- 2026-06-04: multipart 文件上传
@ -108,10 +120,4 @@
- 2026-06-03: 添加连接空闲超时管理 + 最大并发限制 + 分级日志系统
- 2026-06-03: 创建集成测试套件 + 性能基准 + 更新文档
- 2026-06-03: 添加 POST 请求体解析支持30 项测试全部通过README 更新
- 2026-06-03: **本轮行动 — 单元测试框架**
- 引入 Unity 测试框架ThrowTheSwitch
- 创建 `tests/unit/test_http.c`35 个测试)
- 创建 `tests/unit/test_static.c`31 个测试)
- 更新 Makefile`make unit-test` 一键编译运行
- 66 个测试全部通过,集成测试保持 30 项通过
- 推送到 main
- 2026-06-03: 单元测试框架Unity66 个测试全部通过)