JavaScript 中怎样落地大文件并行下载?

HTTP 范围请求

HTTP 协议范围请求允许服务器只发送 HTTP 消息的一部分到客户端。范围请求在传送大的媒体文件,或者与文件下载的断点续传功能搭配使用时非常有用。如果在响应中存在 Accept-Ranges 首部(并且它的值不为 “none”),那么表示该服务器支持范围请求。

在一个 Range 首部中,可以一次性请求多个部分,服务器会以 multipart 文件的形式将其返回。如果服务器返回的是范围响应,需要使用 206 Partial Content 状态码。假如所请求的范围不合法,那么服务器会返回 416 Range Not Satisfiable 状态码,表示客户端错误。服务器允许忽略 Range 首部,从而返回整个文件,状态码用 200 。

1.1 Range 语法


  1. Range: <unit>=<range-start>- 
  2. Range: <unit>=<range-start>-<range-end
  3. Range: <unit>=<range-start>-<range-end>, <range-start>-<range-end
  4. Range: <unit>=<range-start>-<range-end>, <range-start>-<range-end>, <range-start>-<range-end
  • unit:范围请求所采用的单位,通常是字节(bytes)。
  • <range-start>:一个整数,表示在特定单位下,范围的起始值。
  • <range-end>:一个整数,表示在特定单位下,范围的结束值。这个值是可选的,如果不存在,表示此范围一直延伸到文档结束。

了解完 Range 语法之后,我们来看一下实际的使用示例:

1.1.1 单一范围


  1. $ curl http://i.imgur.com/z4d4kWk.jpg -i -H "Range: bytes=0-1023" 

1.1.2 多重范围


  1. $ curl http://www.example.com -i -H "Range: bytes=0-50, 100-150" 

好了,HTTP 范围请求的相关知识就先介绍到这里,下面我们步入正题开始介绍如何实现大文件下载。

【声明】:芜湖站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章