qubiaobiao 1b569a38e6 fix(download): 哨兵按 x-file-size → CD size= 回落(R103 收口)
配套 backend app/utils/sendFile.js 的同一处修复(见该提交):X-Accel-Redirect
分支下 nginx 会丢弃上游自定义响应头 X-File-Size,故后端把同一字节数写进
RFC 6266 §4.1 的 disposition 扩展参数 `size=`(实测 CD 能穿透 X-Accel)。

本提交:
  · 新增 readDeclaredSize(headers):先取 x-file-size,缺失或非正数时回落解析
    Content-Disposition 的 `; size=<n>`;两通道都取不到返回 NaN(调用方跳过校验,
    优雅降级,不误伤)。
  · assertRealFile() 改用它,替换原先只读 x-file-size 的 parseInt。
  · 判据可靠性:filename*= 的值是百分号编码的,其中不可能出现字面量 `size=`,
    且 `size=` 必须落在参数边界(行首或 `;` 之后),故不会与文件名误匹配。

验证:
  · 本地判别力自证 verify_cd_size_channel.js:pass=12 fail=0
    (F0 断言探针判据与本源码逐字同源;F0b 断言确实经由 readDeclaredSize;
     C1 变异测试证明旧形态解不出 ⇒ 判据有判别力;D1/D2/D3 覆盖无误伤边界)
  · 生产 ARM B(经 nginx)实测 CD 的 size=19009 穿透成功
    (r106_prod_sentinel.js pass=11 fail=0)
2026-10-12 11:06:10 +08:00
2026-08-17 12:25:42 +08:00
2026-08-17 12:25:42 +08:00
Description
No description provided
1.6 MiB
Languages
Vue 77.3%
JavaScript 20.9%
CSS 1.5%
HTML 0.3%