大文件下载与 Range 请求
HTTP Range 请求实现大文件断点续传下载、多线程下载与视频拖动播放
#type / concept
#status / evergreen
#tech / dev / backend
#protocol / http
[!info] related notes
大文件下载与 Range 请求
一句话定义
HTTP Range 请求允许客户端只请求文件的某一段字节,实现断点续传下载、多线程下载和视频拖动播放。
核心内容
下载侧的问题
大文件下载也会遇到:
- 网络中断
- 浏览器中止
- 代理超时
- 跨区域速度慢
Range 请求原理
客户端可以请求:
Range: bytes=1048576-2097151
表示只要文件中的 1MB-2MB 这段字节。
后端支持
后端如果支持大文件下载,通常应该支持:
Accept-Ranges: bytes
并正确返回 206 Partial Content 状态码。
适用场景
- 断点续传:下载中断后从断点继续
- 多线程下载:多个连接同时下载不同片段
- 视频拖动播放:只加载当前播放位置的数据
- CDN 更高效分发:按需加载,节省带宽
下载链接权限控制
不能直接把存储真实地址永久暴露出去。
常见做法:
- 业务后端鉴权后返回临时下载链接
- 链带过期时间
- 带签名
- 可限制下载次数/来源
边界与易混淆点
- Range 是下载侧能力:上传侧的断点续传需要专门设计(分块上传)
- 不是所有服务器都支持:需要确认服务器配置正确
- 视频播放优化:Range 请求是视频拖动播放的基础,但需要配合正确的 MIME 类型和 Content-Range 响应头