Elegy233
89fd166424
fix: 旧版 Node 与 iOS 环境下请求降级至 node-fetch v3 修复响应头丢失导致个别源弹幕获取失败 (#431)
* fix: 旧版 Node 下改用 node-fetch v3 以修复 Set-Cookie 被丢弃
Node 18 自带的 undici(fetch 实验特性)在解析响应头时会丢弃 Set-Cookie,导致 youku 等依赖该响应头做令牌握手的请求在 Node < 20.19.0 下失败(FAIL_SYS_TOKEN_EMPTY、segmentList is not iterable)。
将请求层(http-util.js)原仅针对 iOS 巨魔环境的 node-fetch v3 降级条件扩展到「Node < 20.19.0」,与 esm-shim 兼容性边界 20.19.0 对齐;并在 server.js 启动处预加载 node-fetch v3,确保 esm-shim 的 require 代理可被同步取用。httpGet / httpPost / httpRequestMethod / httpGetWithStreamCheck 四处 fetch 调用点统一经 shouldUseNodeFetch() 判定,Node >= 20.19.0 仍走原生 fetch,行为与修复前一致。
* 优化: 旧版Node/iOS降级路径启用 keep-alive 连接复用并收敛降级日志为单次
旧版 Node / iOS 环境下统一降级到 node-fetch v3 后,node-fetch 默认走 keepAlive:false 的全局 Agent,并发场景(如跨季并行 mapping)下比原生 undici 连接池更重。本提交在降级分支接入共享 keep-alive Agent(按协议区分 https/http),复用 TCP/TLS 连接,与原生 undici 连接池达到实际等价。
同时将原本 4 个 fetch 调用点「每次请求都输出」的降级日志收敛为模块加载时计算一次、运行时单次启动日志,避免降级环境下日志刷屏。降级判定仅依赖静态环境、进程内恒定,故可安全缓存。
* 文档: 精简 http-util 降级判定的函数注释
将 detectNodeFetchDowngrade 上方注释压缩为单行,保留降级边界(Node<20.19.0 与 esm-shim 一致)、根因(旧 undici 丢弃 Set-Cookie)、iOS 无 WebAssembly 及静态判定缓存动机,去除冗余推导表述。
2026-08-11 00:19:24 +08:00
..
2026-08-09 12:23:59 +08:00
2026-08-11 00:18:37 +08:00
2026-08-01 12:55:27 +08:00
2026-08-09 12:23:59 +08:00
2026-08-11 00:18:37 +08:00
2026-08-11 00:19:24 +08:00
2026-02-04 18:10:58 +08:00
2026-08-11 00:19:24 +08:00
2026-08-11 00:18:37 +08:00
2026-08-11 00:19:02 +08:00