飘在云端

东西南北,海角天涯

· 未定义浏览器 · · 209次浏览

谷歌浏览器对稀疏文件的下载强力(诡异)优化

测试环境:
Google Chrome v109 x64
Windows 7 sp1 x64
Nginx v1.22.1 / Alist v3.35.0
未使用 CDN
Ubuntu v22.04.2 LTS
希捷 x18 银河 16T 氦气盘


一开始使用生成空数据的稀疏文件(sparse file) 10G 大小

dd if=/dev/zero of=10G.zip bs=1M seek=10000 count=0

结果浏览器下载直接以本地机械硬盘的最大读写速度进行,检查网络流量,为 0,一看就是使用本地缓存或者直接生成,没有经过网络传输,浏览器直接填充这些空白数据

优化下代码,随机填充了一些数据进去,模拟伪装成完整二进制文件

dd if=/dev/zero of=10G.zip bs=1M seek=10000 count=0
fallocate -l 10G 10G.bin

结果还是被谷歌浏览器给优化了,速度 120-350 mb/s 之间波动

尝试防止缓存,增加 header

add_header Content-Disposition 'attachment; filename="10G.bin"';
add_header Cache-Control 'no-store';
add_header Pragma 'no-cache';

更换生成方式

truncate -s 10G 10G.zip
fallocate -l 10G 10G.zip

重启 nginx ,使用谷歌浏览器无痕模式访问

结果依旧,此时我觉得太诡异了

想起 nginx 还有个模块 chunked_transfer_encoding,可以模拟文件的下载,而不是直接传输完整文件,或许能绕过这个诡异的优化机制?

添加到了相关 location 段

chunked_transfer_encoding on;

重启 nginx + 浏览器无痕模式结果不变,依然以本地机械硬盘的最大读写速度下载 , 120 -250 MiB/s

人傻了,好这么玩是吧?
套了层娃,使用 Alist 作为后端,由 Nginx 反向代理转发请求给后端,企图玄学

狠狠的被打脸,还是本地生成数据的速度,尝试检查,删除 10G.zip,nginx 返回 404,Alist 也是返回 404,好像没办法了

最后只好含泪舍弃 10G 空间

dd if=/dev/urandom of=/var/nginx/html/temp/10G.zip bs=1M count=10000

再次下载才恢复正常,通过网络传输了

在线等,急,什么情况的神优化?

评论 (0条)