Skip to content

v0.8.1

Choose a tag to compare

@github-actions github-actions released this 02 Nov 04:37
· 5 commits to main since this release

修复

明文 HTTP 响应头块缺终止空行(#9):经中继返回的明文 HTTP 响应在头块末尾只有一个 CRLF,响应体(分块长度)被客户端当成头字段解析——curl 报 curl: (8) Header without colon、web_fetch 报 TypeError: fetch failed,且收到 0 字节。现补上终止空行(CRLFCRLF)。HTTPS 走 CONNECT 隧道、原始字节透传,不受此影响。

同一路径上会让头字段失真的几处一并修掉:

  • 响应头原先塞进普通对象,多个 Set-Cookie 只剩最后一个 → 同名头改为按出现顺序累积,逐个写出,顺序不变;
  • 1xx/204/304 与 HEAD 没有消息体,原先仍按 CL/chunked/EOF 去读,会挂到上游关流或误报截断 → 头之后直接收尾;
  • 响应侧重复调用 stripHop() 会多写一条 connection: close → 响应侧不再调用;stripHop 另补剥逐跳头 te、trailer;
  • fetch 通道(lib/proxy/http11.js)同样用对象收头,且以 new Headers(hdrs) 重建响应,数组值会被拼成 "a,b" 一条 → 改为逐次 append,getSetCookie() 能拿到全部值。

新增

代理请求超时可配置(#8):timeout 此前会被 toProxy() 丢弃,保存 300000 仍按 60 秒走。现接通配置到请求层,并在设置页加入以秒编辑的输入框。默认仍为 60 秒,校验限制 1–2147483647 整数毫秒;非法提交不落盘,旧配置中的非法值只回退该字段,不会因此关闭代理。

验证

  • 先抓原始字节复现:修复前 ...chunked\r\n4\r\nBODY,修复后 ...chunked\r\n\r\n4\r\nBODY。
  • 响应头相关新用例均经「还原修复 → 必须失败」反向确认(旧代码下多 Set-Cookie 得到合并成一条的 a=1; Path=/,b=2; Path=/,c=3; Path=/)。
  • 全量 160 项通过,eslint . 干净。

说明

本次为 patch 版本。超时配置属新增能力,按语义化版本应走 minor,但 0.8.x 尚未累计到需要跳号的变更,故与修复同版发出。

npm ci 在本地会因 @eslint/js@10 与锁定的 eslint 9 冲突报 ERESOLVE(既有问题,与本次改动无关),CI 与 release workflow 已用 --legacy-peer-deps 绕过。