使用http压缩时的内容长度

der*_*wei 27 http

客户端正在向http服务器发出范围请求0-1023.它更喜欢使用Accept-Encoding进行gzip压缩:gzip; q = 1.0,identity; 请求中q = 0.5,*; q = 0.

响应头中的内容长度是多少?它是1024还是压缩数据的大小.

谢谢,

pkh*_*pkh 24

它是1024或压缩大小中的较小者.

RFC2616第14节说:

"[这个答案的其余部分与提出的实际问题无关.我将其留下,因为有些人发现它很有用.]

关于Content-Length,RFC 2616对此(以及其他内容)有这样的说法:

应用程序应该使用此字段来指示消息正文的传输长度,除非4.4节中的规则禁止这样做.

所以我们必须弄清楚转移长度是多少; 第4.4节(消息长度)说这两个关于传输长度的事情:

消息的传输长度是消息中出现的消息体的长度; 也就是说,在应用任何转移编码之后.

如果存在Content-Length头字段(第14.13节),则其在OCTET中的十进制值表示实体长度和传输长度.如果这两个长度不同,则不得发送Content-Length头字段

好的,所以我们知道在这种情况下,transfer-length,entity-length和Content-Length都具有相同的值,并且都指的是"消息体中出现的消息体的长度",所以我们必须确定什么是消息体.第4.3节说明了关于消息体的内容:

HTTP消息的消息体(如果有的话)用于携带与请求或响应相关联的实体主体."

那么什么是实体 - 身体?为此你必须首先参考第7节的所有内容.(这也定义了实体长度.)最重要的是,有:

entity-body:=内容编码(内容类型(数据))

实体主体的长度(因此我们的每4.4内容长度的值)是内容编码后的数据长度.

  • 我觉得这个答案很模糊.它是gzip数据的**长度**或者它是gzipping**之前数据的**长度吗? (7认同)
  • 错误.我们正在讨论Content-Encoding,而不是Transfer-Encoding.它将是*gzip压缩后内容*的前1024个字节. (3认同)
  • 它仍然是不正确的.如果你要求使用Content-Encoding:gzip的1024字节资源,那么你将获得1024字节(gzip)资源. (3认同)
  • 你的失误。” 是不正确的。我会接受“不太完整”。我已将其余部分添加到内容编码中。 (2认同)