cocoon/.cocoon-plan.md

118 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Cocoon 发展规划(自主维护)
> 此文件由 cron 任务每3小时更新记录项目状态与下一步计划。
## 路线图
### Phase 1 — 核心稳定(当前)
- [x] HTTP/1.1 请求解析
- [x] 响应头格式化
- [x] 静态文件服务sendfile
- [x] 目录浏览
- [x] Range 请求
- [x] MIME 类型识别
- [x] 多线程 M:N 调度
- [x] 命令行参数
- [x] 优雅关闭
### Phase 2 — 健壮性
- [x] HTTP 缓存ETag / Last-Modified / If-None-Match✅ 2026-06-03
- [x] 连接超时管理(空闲连接自动清理)✅ 2026-06-03
- [x] 最大并发连接数限制 ✅ 2026-06-03
- [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] 性能基准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 个测试全部通过)
### 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
- [ ] Windows 兼容性
### Phase 4 — 生态
- [ ] WebSocket 支持
- [ ] 中间件机制
- [ ] 插件系统
## 当前状态
- 编译通过,零警告(除 coco 子模块的 linker .note.GNU-stack 提示)
- **39 项集成测试全部通过**GET/HEAD/POST/404/Range/304/gzip/brotli/MIME/目录浏览/路径防护/文件上传/TLS握手/HTTPS响应
- **127 个单元测试全部通过**Unity 框架1 个忽略),新增 2 个 TLS 集成测试
- 压测数据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 升级待实现
## 待办池
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
## 最近行动记录
- **2026-06-04: 本轮行动 — HTTP/2 骨架 + server.c 集成**
- 新增 `http2.c` / `http2.h`:基于 nghttp2 的 HTTP/2 会话管理431 行)
- 修复编译:匹配 `http_request_t` 结构,使用 `log_error` 替代 `LOG_ERROR`
- server.c: 添加 `handle_http2()` 函数,在 `client_handler` 中检测 HTTP/2 连接
- TLS ALPN 协商后自动创建 HTTP/2 会话
- HTTP/2 连接走独立处理路径(帧读写循环)
- tls.c/tls.h: 新增 `tls_negotiated_http2()`,检查 ALPN 是否协商为 h2
- 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` 配置字段
- `server.c`accept 后执行 TLS 握手,读/写/关闭路由到 TLS 层
- `static.c`TLS 连接降级 sendfile 为缓冲 read+write修复 lseek 定位(压缩读取后重置文件位置)
- `config.c` / `config.h`JSON 配置支持 `tls_cert`, `tls_key`, `tls_enabled`
- `main.c`:新增 `--cert`, `--key`, `--tls` CLI 选项
- `Makefile`:加入 `tls.c`,链接 `-lssl -lcrypto`
- 生成自签名测试证书 `tests/server.crt` / `tests/server.key`
- `tests/integration_test.sh`:新增 TLS 握手 + HTTPS 响应验证,修复 `kill_server` 匹配规则curl 添加 `--max-time``-k`
- `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: Brotli 压缩支持(优先于 Gzip
- 2026-06-04: 配置文件支持 + gzip_enabled 控制 + README 修正
- 2026-06-04: multipart 文件上传
- 2026-06-03: 项目初始化,核心模块全部实现
- 2026-06-03: 添加缓存协商ETag + Last-Modified + 304修复编译警告
- 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