111 Commits

Author SHA1 Message Date
xfy911
ea5436febb feat(compression): 添加 Brotli 压缩支持,优先于 Gzip
- static.c: 新增 brotli_compress(),使用 libbrotlienc(质量 11,窗口 22)
- static_serve_file(): 优先 Brotli,回退 Gzip,二进制文件跳过
- http.c: 解析 Accept-Encoding: br,http_request_t 新增 accept_brotli
- cocoon.h: cocoon_config_t 新增 brotli_enabled(默认 true)
- config.c/h: 解析 brotli_enabled JSON 字段,config_merge() 新增 has_brotli_enabled
- main.c: --no-brotli 命令行选项
- server.c: 连接结构体新增 brotli_enabled
- Makefile: 链接 -lbrotlienc
- 单元测试: test_static.c 新增 4 个 Brotli 测试;test_config.c 新增 brotli 配置测试
- 集成测试: 新增 5 项 Brotli 测试(br 压缩、优先策略、图片不压缩)
- cocoon.json: 添加 brotli_enabled 字段
- README: 更新特性描述、curl 示例、命令行参数、路线图
- 113 个单元测试全部通过,37 项集成测试全部通过
2026-06-04 06:19:42 +08:00
xfy911
3801f3ac0d feat(config): 添加 JSON 配置文件支持 + gzip_enabled 控制 + README 修正
- config.c/config.h: 极简 JSON 解析器,支持数字/字符串/布尔//注释
- cocoon_config_t 新增 gzip_enabled 字段(默认 true)
- main.c: -c <file> 加载配置,--no-gzip 禁用压缩,命令行覆盖配置
- 修复 -r 参数 strdup 崩溃(避免 free 野指针)
- 修复 signal handler 双重 free 问题
- 单元测试: test_config.c 17 个测试全部通过
- 集成测试: 32 项全部通过
- README 修正过时描述(配置方式、安全设计、-v 说明)
2026-06-04 03:14:32 +08:00
xfy911
c036615d58 chore: 添加 test_server 到 gitignore + 更新待办池
- .gitignore: 补充 tests/unit/test_server,避免误提交编译产物
- .cocoon-plan.md: 新增 signal handler cleanup bug 和中文注释完善到待办池
2026-06-04 00:29:31 +08:00
xfy911
19c97ae6a9 test(config): 补充边界与异常路径测试
- test_load_invalid_field_type: 字段类型非法(port 为字符串),验证不 crash
- test_load_log_level_invalid: 非法 log_level 值保持默认 INFO
- test_load_nested_ignored: 嵌套对象——极简解析器返回 false 但不 crash
- test_load_array_ignored: 数组——同上,不 crash 即可
- test_merge_cmdline_null_root_dir: cmdline root_dir 为 NULL 时不覆盖 base
2026-06-04 00:24:29 +08:00
xfy911
d5b8782a1b feat: 添加 Unity 单元测试框架
- 引入 Unity 测试框架 (ThrowTheSwitch)
- 创建 test_http.c (35 个测试): 请求解析、响应格式化、MIME 类型、内存管理
- 创建 test_static.c (31 个测试): 压缩判断、时间处理、ETag、路径安全、HTML 转义、gzip、socket 层
- 更新 Makefile: make unit-test 一键编译运行
- 66 个测试全部通过,集成测试保持 30 项通过
2026-06-03 23:53:22 +08:00
xfy911
bbc45d0735 feat(post): 添加 POST 请求体解析支持
- http_request_t 新增 body / body_len / content_type 字段
- http.c 解析 Content-Type 头,新增 http_request_free 释放 body
- server.c 新增 conn_read_body 从 socket 读取请求体(8MB 上限)
- server.c 新增 handle_post_request 返回 JSON 回显
  - 支持 application/json 直接回显
  - 支持 application/x-www-form-urlencoded 字符串回显
  - 其他类型返回基本信息
- 8MB 请求体上限(HTTP_MAX_BODY),超限返回 413
- 集成测试新增 3 项 POST 测试:JSON 回显、表单回显、PUT 405
- 30 项测试全部通过
- README 更新:添加 POST 特性、curl 示例、路线图更新
- send_all 从 static 改为全局可见,供 server.c 复用

Phase 2 全部完成:缓存/超时/日志/gzip/测试/压测/POST
2026-06-03 21:24:03 +08:00
xfy911
b6beb8bb9c feat(tests): 添加集成测试套件 + 性能基准 + 更新文档
- 新增 tests/ 目录:
  - integration_test.sh: 27 项 curl/bash 集成测试(GET/HEAD/404/Range/304/gzip/MIME/目录浏览/路径防护)
  - benchmark.sh: wrk 压测脚本,支持单线程和多线程模式
  - fixtures/: 测试用静态资源(HTML/CSS/JS/JSON/PNG)
- Makefile 新增 test / bench 快捷目标
- README 全面更新:
  - 补充 Gzip/缓存/超时/日志等已实现特性
  - 更新命令行参数(-m/-o/-l/-v)
  - 添加性能基准表格(~16K RPS / ~60μs 延迟)
  - 路线图标记已完成项
- .cocoon-plan.md 更新 Phase 2 进度
2026-06-03 21:15:05 +08:00
xfy911
e482e52658 docs(plan): 更新 Phase 2 进度 — gzip 压缩已完成 + 压测数据
- 标记 gzip 压缩为已完成(3086B → 1282B,压缩率 41%)
- 记录单线程压测数据:15K RPS,64us 平均延迟,47MB/s 传输
2026-06-03 18:19:57 +08:00
xfy911
0a71365fac docs(plan): 更新 Phase 2 进度 — 超时/日志已完成,gzip 待集成 2026-06-03 18:19:23 +08:00
xfy911
aebacc26ef docs(plan): 更新进度 — HTTP 缓存已完成 2026-06-03 17:38:59 +08:00
xfy911
a30fcf6ee1 docs(plan): 添加自主发展规划文件 2026-06-03 17:22:54 +08:00