Content-Range用于恢复未知长度的文件

时间:2013-03-17 15:40:22

标签: http resume chunked-encoding http-range

我从已经压缩的现有资料(使用节点)创建一个未知长度的 ZIP存档。在ZIP存档中,文件只是存储; ZIP仅用于拥有一个容器。这就是为什么缓存创建的ZIP文件毫无意义 - 没有涉及真正的计算。

到目前为止,好的。现在我想允许恢复下载,而我正在阅读有关Accept-Range,Range和Content-Range HTTP标头的内容。下载中断的客户端会要求开放式范围,例如:Range: bytes=8000000-

我该如何回答?我的答案必须包含一个Content-Range标题,根据RFC 2616 § 14.16

  

与字节范围指定值不同(参见第14.35.1节),字节范围-resp-spec必须只指定一个范围,并且必须包含范围的第一个和最后一个字节的绝对字节位置。 / p>

所以我不能只发送“从位置X开始的所有内容”,我必须指定发送的最后一个字节 - 通过仅发送已知大小的一部分,或者通过提前计算长度。这两种想法对我的情况都不方便。还有其他可能吗?

2 个答案:

答案 0 :(得分:0)

回答自己:看起来我必须在(1)未知长度文件的分块编码或(2)知道其内容长度(或至少是当前部分的大小)之间做出选择,允许恢复下载(以及进度条)。

我可以忍受 - 对于我的每个ZIP文件,长度都是相同的,所以我可以将它存储在某处并重新用于后续下载。我很惊讶HTTP协议不允许恢复未知长度的下载。

答案 1 :(得分:0)

响应“multipart / byteranges”Content-Type,包括每个部分的Content-Range字段。

推理:

  1. 使用“范围”标头回复请求时,成功的部分响应应报告206 HTTP状态代码(14.35.1 Byte Ranges section

  2. 206响应表明“内容范围”标题或“多部分/字节范围”内容类型(10.2.7 206 Partial Content

  3. “Content-Range”标题无法添加到响应中,因为它不允许省略结束位置,因此唯一的左边方法是使用“multipart / byteranges”Content-Type

相关问题