我在node.js中实现静态文件服务,以便学习和娱乐。我们假设我发送了一个名为party-time.txt
的文件:
100 bytes uncompressed
70 bytes gzipped
如果用户请求Range: bytes=-10
,是对最后10个未压缩字节的请求(例如,91-100)还是最后10个压缩字节(例如61-70)?
答案 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。