加载中...
HTTP Range 请求允许客户端只索取资源的某一部分字节,而非整个文件。它是断点续传、多线程下载和媒体拖动播放的技术基础,通过 Range 与 Content-Range 头协商传输区间。

| 核心请求头 | Range |
| 核心响应头 | Content-Range |
| 成功状态码 | 206 部分内容 |
| 失败状态码 | 416 范围不满足 |
| 能力声明 | Accept-Ranges |
HTTP Range 请求是一种让客户端只获取资源部分内容的机制,客户端通过 Range 请求头指定希望获取的字节区间,服务器若支持则返回状态码 206 及对应的数据片段。它是实现断点续传和媒体随机访问的核心。
在下载大文件时,如果网络中断就得从头重来,既浪费流量又浪费时间。Range 请求让客户端能够声明只要文件中某个字节区间的数据,从而在中断后从上次位置继续下载,或把文件切成多段并行下载以提升速度。视频播放器拖动进度条时,也依赖它跳转到指定位置。
为了保证多次请求拼接的是同一版本的文件,客户端通常配合 If-Range 头,携带资源的 ETag 或修改时间;若服务器发现资源已变化,则会返回完整内容而非片段,避免拼出损坏的文件。
下载工具的断点续传与多线程加速、在线视频与音频的边下边播和进度拖动、大型软件分发的分片校验,都建立在 Range 请求之上。内容分发网络也常用它来实现大文件的分片缓存与回源。
问:为什么有的文件无法断点续传?答:通常是因为服务器没有返回 Accept-Ranges 头或明确声明不支持范围请求,此时客户端只能整段重新下载。
问:多线程下载一定更快吗?答:不一定。若瓶颈在本地带宽或服务器单连接限速之外的总带宽,多线程收效有限,反而增加服务器连接压力。

| 核心请求头 | Range |
| 核心响应头 | Content-Range |
| 成功状态码 | 206 部分内容 |
| 失败状态码 | 416 范围不满足 |
| 能力声明 | Accept-Ranges |
登录 后参与讨论
暂无讨论,来发表第一条评论吧