下载器暂停后继续,进度条从零开始,抓包看到请求带了 Range: bytes=52428800-,响应状态是 200,Content-Length 仍是完整文件大小。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
curl -I -H 'Range: bytes=0-1023' https://example.com/file.zip # 期望 HTTP/1.1 206 Partial Content # Content-Range: bytes 0-1023/52428800
下载脚本自己读文件输出,没解析 Range 头,也没有返回 206 和 Content-Range。中间还开了 gzip,字节偏移和实际文件对不上。这一点先确认清楚,后面就不用反复试。
碰到「HTTP Range 响应」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
具体做法是,由 Nginx 提供文件,它原生支持 Range 和 206 响应;关闭该路径的 gzip,避免压缩改变字节长度;用 curl 带 Range 头请求,确认返回 206 和正确的 Content-Range。
改完照着核一遍,续传请求返回 206,下载器从断点继续而不是从头开始。
