xfy911
|
606c7b6b4e
|
feat(http2): 添加 HTTP/2 目录浏览支持
- 新增 http2_serve_directory() 函数,生成 HTML 目录列表页面
- 目录无 index.html 时自动返回目录浏览(与 HTTP/1.1 行为一致)
- 支持 HTML 转义、文件大小格式化、修改时间显示、上级目录链接
- 支持 HEAD 请求(不发送 body)
- 新增 2 项集成测试:HTTPS h2 目录浏览 + h2c 目录浏览
- 54 项集成测试全部通过,35 个单元测试全部通过
|
2026-06-04 18:13:48 +08:00 |
|
xfy911
|
a93e9f32f5
|
feat(h2c): 添加明文 HTTP/2 升级支持
- server.c: 检测 PRI 魔术字直接连接 + Upgrade: h2c 协商
- server.c: 101 Switching Protocols 响应,正确会话生命周期管理
- http2.h/c: 新增 http2_session_upgrade() 注册 stream 1
- http2.c: 修复 nghttp2_session_upgrade2 head_request 参数误用
- tests: 新增 4 项 h2c 集成测试(prior knowledge、Upgrade、404)
- plan: 标记 h2c 完成,更新测试计数 52 项
|
2026-06-04 17:56:44 +08:00 |
|
xfy911
|
e9d7af80b8
|
feat(http2): HTTP/2 静态文件服务支持 gzip/brotli 压缩
- http2.c: 文件内容读取到内存后按需压缩(优先 brotli,回退 gzip)
- 响应头自动添加 content-encoding: br 或 gzip
- 不可压缩类型(图片等)跳过压缩
- 修复 curl 测试:添加 --compressed 自动解压
- 新增 4 项 HTTP/2 压缩集成测试(HTML/CSS/JS brotli、图片不压缩)
- 49 项集成测试全部通过,35 个单元测试全部通过
|
2026-06-04 16:15:29 +08:00 |
|
xfy911
|
22c9f74e76
|
feat(http2): 实现 HTTP/2 静态文件服务,修复 ALPN 协商与 send_callback 返回值
主要变更:
- http2.c: 实现完整的 HTTP/2 静态文件服务(GET/HEAD、路径安全、ETag、304 缓存)
- http2.c: 修复 :path 伪头长度解析 bug(4→5)和路径空终止问题
- http2.c: 修复 send_callback 返回值 bug(send_all 返回 0 而非已发送字节数)
- http2.c: 添加 If-None-Match / If-Modified-Since 缓存头解析
- http2.h: 扩展 http2_session_t 结构体,添加 root_dir/gzip/brotli 字段
- http2.h: 新增 http2_session_set_context() 接口
- server.c: 在 handle_http2() 中调用 set_context 传入连接配置
- tls.c: 实现 ALPN 选择回调,优先协商 h2 次选 http/1.1
- tls.c: 修正 ALPN 协议格式解析(长度前缀字符串序列)
- tests/integration_test.sh: 新增 6 项 HTTP/2 集成测试(ALPN、GET、HEAD、404、缓存)
集成测试:45 项全部通过(新增 6 项 HTTP/2 测试)
单元测试:127 项全部通过
|
2026-06-04 15:45:16 +08:00 |
|
xfy911
|
6bb9635b2d
|
feat(http2): 添加 HTTP/2 支持骨架(nghttp2)
- 新增 http2.c / http2.h:基于 nghttp2 的 HTTP/2 会话管理
- 支持 TLS ALPN 协商和明文 h2c 升级
- 流级请求/响应处理,集成现有 http_request_t 结构
- 编译通过,链接 -lnghttp2
- Makefile 更新:包含 http2.c 和 nghttp2 库链接
- 待完成:server.c 集成(ALPN 协商、h2c 升级检测)
|
2026-06-04 14:40:02 +08:00 |
|