使用http压缩时的内容长度

时间:2010-09-29 06:35:16

标签: http

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

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

谢谢,

3 个答案:

答案 0 :(得分:24)

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

RFC2616 section 14说:

” [这个答案的其余部分与提出的实际问题无关。我要离开了,因为有些人发现它很有用。 ]

RFC 2616(包括其他内容)有关Content-Length的说法:

  

应用程序应该使用此字段来指示传输长度   消息体,除非这部分规则禁止   4.4。

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

  

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

     

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

好的,我们知道在这种情况下,transfer-length,entity-length和Content-Length都具有相同的值,并且都引用“消息中出现的消息体的长度”,所以我们必须确定什么是消息体。 Section 4.3对消息体说:

  

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

那么实体是什么?为此,您必须基本上参考所有Section 7。 (这也定义了实体长度。)最重要的是,有这个:

  

entity-body:= Content-Encoding(Content-Type(data))

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

答案 1 :(得分:2)

实际内容长度取决于传输编码和数据:如果使用 identity ,则不应用压缩,内容长度为1024;如果您使用 gzip ,实际内容长度取决于要压缩的数据。

答案 2 :(得分:1)

实际上它将是1024,这是压缩数据的大小。