【问题标题】:Is the Range header the size in bytes of the compressed or uncompressed bytes?Range 标头是压缩字节还是未压缩字节的字节大小?
【发布时间】:2015-08-25 16:09:35
【问题描述】:

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

100 bytes uncompressed

70 bytes gzipped

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

【问题讨论】:

    标签: javascript node.js http-headers webserver


    【解决方案1】:

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

    14.35.2 Range Retrieval Requests

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

    【讨论】:

      【解决方案2】:

      作为 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
      

      【讨论】:

        猜你喜欢
        • 2017-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-16
        相关资源
        最近更新 更多