xfy911
|
e6b4a11d16
|
feat(http2): HTTP/2 代理流式转发
- 新增 proxy_data_source_read_callback:实时从后端读取数据流式转发
- http2_serve_proxy 重构:解析响应头后立即发送,body 通过 DATA 帧实时转发
- 解除 64KB 响应缓冲区限制,支持任意大小响应体
- 流结构新增代理字段(backend_fd/tls_conn/eof/close_backend/backend)
- 已缓存 body(recv_headers 预读部分)优先发送,再续读后端
- 连接池归还/关闭自动处理
|
2026-06-10 00:22:46 +08:00 |
|
xfy911
|
60ef9ed908
|
feat(vhost): 虚拟主机/多站点支持
- cocoon.h: 新增 cocoon_vhost_t 结构体和 COCOON_MAX_VHOSTS 宏
- config.c: JSON 解析器新增 vhosts 数组解析
- server.c: HTTP/1.1 请求根据 Host 头匹配虚拟主机 root_dir
- http2.h/c: HTTP/2 根据 :authority 匹配虚拟主机,存储为 Host 头
- http2.c: 新增 http2_session_set_server_config() API
- cocoon.json: 添加 vhosts 配置示例
- tests: 新增 3 项虚拟主机集成测试
- 编译零警告,142 单元测试 + 106 集成测试全部通过
|
2026-06-09 15:28:57 +08:00 |
|
xfy911
|
90601e0f67
|
fix(proxy): 修复连接池 HTTP/1.0 兼容与配置合并 bug
- proxy.c: 当后端发送 Connection: close 或关闭连接时,不再归还已关闭连接
到池中。避免复用已关闭连接导致请求失败。
- http2.c: HTTP/2 代理检测到 HTTP/1.0 响应时默认关闭连接,不再错误归还。
- main.c: 修复 -c 配置文件与 --cert/--key 同时使用时 config_merge 的
use-after-free 问题。先加载配置文件,再用命令行参数覆盖。
- tests/http10_backend.py: 新增 HTTP/1.0 后端模拟器,用于测试连接池兼容。
- tests/integration_test.sh: 添加 HTTP/1.0 后端兼容测试,验证两次连续请求
均成功(第二次必须新建连接)。
|
2026-06-09 12:35:26 +08:00 |
|
xfy911
|
7fe52a3b6e
|
feat(http2): 添加 HTTP/2 反向代理支持
实现 HTTP/2 客户端连接通过 HTTP/2 流转发到 HTTP/1.1 后端:
- 在 http2.c 中新增 http2_serve_proxy() 函数
- 实现请求重组:将 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 后端连接
- 在 server.c 中注入代理配置到 HTTP/2 会话
- 修复 parse_http1_response 中 body_len 下溢问题
- 添加 HTTP/2 代理集成测试
当前限制:
- 采用非流式方案(先收集完整后端响应再发送)
- 连接池对 HTTP/1.0 后端(无 keep-alive)处理有待完善
- 单元测试:142 项全部通过
- 集成测试:HTTP/2 GET 代理测试通过
|
2026-06-09 09:39:08 +08:00 |
|
xfy911
|
9da9bd9449
|
docs: 为 config.c、log.c、tls.c 添加函数级 Doxygen 注释
- config.c: 为 JSON 解析器内部函数和公共 API 添加完整注释
- log.c: 为日志级别转换和输出函数添加注释
- tls.c: 为 TLS 连接管理、Memory BIO 操作和 ALPN 回调添加注释
- http2.c: 移除过时的 TODO 占位注释(请求体收集已实现)
|
2026-06-07 09:05:45 +08:00 |
|
xfy911
|
0bf37ba3f0
|
feat(http2): 实现 HTTP/2 POST 请求体支持
- on_data_chunk_recv_callback: 将 DATA 帧数据追加到 stream->request.body
- on_frame_recv_callback: 根据请求方法选择处理方式(POST → http2_serve_post)
- http2_serve_post: 处理 HTTP/2 POST 请求
- 支持 multipart/form-data 文件上传
- 支持 JSON 和 form-urlencoded 回显
- 构建 JSON 响应并通过 nghttp2 发送
- 包含 multipart.h 和 platform.h 到 http2.c
- 142 个单元测试 + 77 项集成测试全部通过,编译零警告
|
2026-06-07 00:06:00 +08:00 |
|
xfy911
|
d0f3bb860f
|
docs(http2): 添加完整的中文 Doxygen 注释
为 http2.c 所有 29 个函数添加中文文档注释:
- 压缩辅助函数(is_compressible_mime, gzip_compress, brotli_compress)
- 会话管理(init, cleanup, create, destroy, is_http2, get, set_context, upgrade)
- 数据收发(recv, send_pending, want_read, want_write)
- nghttp2 回调(send, begin_headers, header, frame_recv, stream_close, data_chunk)
- 静态文件服务(format_http_time, generate_etag, parse_http_time, match_etag,
data_source_read, serve_directory, serve_static)
- 连接处理(on_connection_accepted)
所有注释包含功能说明、参数说明和返回值说明。
|
2026-06-04 21:07:05 +08:00 |
|
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 |
|