Range标头是压缩或未压缩字节的大小(以字节为单位)吗?

时间:2015-08-25 16:09:36

标签: javascript node.js http-headers webserver

我在node.js中实现静态文件服务,以便学习和娱乐。我们假设我发送了一个名为party-time.txt的文件:

100 bytes uncompressed

70 bytes gzipped

如果用户请求Range: bytes=-10,是对最后10个未压缩字节的请求(例如,91-100)还是最后10个压缩字节(例如61-70)?

2 个答案:

答案 0 :(得分:1)

作为HTTP协议的一部分,您应该指定Content-Encoding以及Content-Length。内容长度应与文件相对于编码技术的长度相匹配。例如,如果将Content-Encoding设置为gzip,则用户请求的字节范围应该是对压缩长度的请求。

数据包示例:

HTTP/1.1 200 OK
Date: mon, 28 Aug 2015 22:38:34 GMT
Server: <Your server>
Last-Modified: mon, 28 Aug 2015 22:38:34 GMT
Accept-Ranges: bytes
Content-Length: 438
Connection: close
Content-Type: text/html; charset=UTF-8
Content-Encoding: gzip

答案 1 :(得分:1)

  

使用条件或无条件GET方法的HTTP检索请求可以使用Range请求标头来请求实体的一个或多个子范围,而不是整个实体,适用于作为结果返回的实体。请求

14.35.2 Range Retrieval Requests

因为从请求返回的实际实体是gzip编码数据,所以该数据用于导出Content-Length,因此应用Range。