http - 用于恢复未知长度文件的内容范围

标签 http resume chunked-encoding http-range

我根据已经压缩的现有 Material (使用 Node)创建了一个未知长度的即时 ZIP 存档。在 ZIP 存档中,文件只是被存储; ZIP 仅用于有一个容器。这就是缓存创建的 ZIP 文件没有意义的原因 - 不涉及真正的计算。

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

我该如何回答?根据 RFC 2616 § 14.16,我的答案必须包含一个 Content-Range header ,并且在那里:

Unlike byte-ranges-specifier values (see section 14.35.1), a byte- range-resp-spec MUST only specify one range, and MUST contain absolute byte positions for both the first and last byte of the range.

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

最佳答案

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

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

关于http - 用于恢复未知长度文件的内容范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15462654/

相关文章:

http - 如何从授权 header 中提取 JWT

c# - RestSharp 在上传时将整个文件加载到内存中。如何避免?

http - 为什么有时我网站地址栏中的 https 会出现斜线?

exception - 从 Perl 6 中的异常处理程序返回值

Chrome HTTP RANGE 中的 PHP 下载恢复无法正常工作

facebook - 如何使用 Proxygen 和 Folly 发送 HTTP 分块响应来模拟视频流?

networking - 如何使用Wireshark查看源页面?

perl - 如何使用 WWW :Mechanize? 进行分块传输编码上传

java - 如何删除 http 302 响应中的授权 header

objective-c - AFNetworking + 暂停/继续下载大文件