大文件下载与 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 响应头
创建于 2026/3/28 更新于 2026/5/27