HTTP标头中的“ Content-Length”字段是什么?


282

这是什么意思?

  1. 标头中指定编码格式的编码内容字符串的字节数。
  2. 内容字符串的字符数。

特别是在Content-Type: application/x-www-form-urlencoded

Answers:


239

rfc2616

Content-Length实体标头字段指示发送给接收方的实体的大小(以OCTET的十进制数为单位),如果使用HEAD方法,则指示已发送的实体的大小。该请求是GET。

内容类型是什么都没有关系。

下面的帖子中扩展。


14
将此答案与Tom Cabanski的答案结合起来,您便拥有了所需的所有信息。对于文本,由于ASCII为8位,因此您可以计算字符数。
hcpl 2012年

9
@hcpl:但文字并不一定总是ASCII,还ASCII是7位,不是8
李瑞安

2
用您正在使用的任何编码替换ASCII并查找编码所需的位数。对于7 vs 8位响应;最初确实是7位,所以您又是对的。但是今天,由于计算机内存的组织方式,大多数(如果不是全部)情况下使用8位。编辑:重读我的答案,我知道你要去哪里。我应该改写我的原始评论。
hcpl

6
@hcpl:字节与字符问题非常重要的全部原因是由于可变宽度编码(例如UTF-8和UTF-16)的“位数”不固定。
StefanKarpinski 2014年

2
你能伪造这个号码吗?例如POST长度很大的字符串参数,但是将您的content-length设置为1?
李时敏

260

它是请求或响应主体中数据的字节数。主体是标题下方空白行之后的部分。


1
不是“请求或响应”,而是“响应的主体”吗?该请求在标题和数据之间没有空白行。
ajfbiw.s 2016年

我可以改变在一个java滤波器日提交的HTTP响应报头内容长度
KItis

2
@ ajfbiw.s考虑一个http发布请求。“通过在请求的消息头中包含Content-Length或Transfer-Encoding头字段来指示请求中消息体的存在。” from w3.org/Protocols/rfc2616/rfc2616-sec4.html# sec4.3
罗伊·

68

所述Content-Length报头是一个数字表示的HTTP主体的精确字节长度。HTTP正文在起始行和标头之后的第一个空行之后立即开始。

通常,Content-Length标头用于HTTP 1.1,以便接收方知道当前响应*何时完成,因此可以将连接重用于另一个请求

* ...或请求,如果请求方法具有主体,例如POST,PUT或PATCH

或者,Content-Length可以省略Transfer-Encoding标题,而可以使用分块标题

如果Content-LengthTransfer-Encoding标头都丢失,则在响应结束时必须关闭连接。

以下资源是我在学习HTTP时非常有用的指南:

HTTP非常简单


45

一个八位位组是8位。内容长度是消息正文表示的八位字节数。


37
八位字节= AKA字节?
ViniciusPires 2014年

77
@ViniciusPires“字节”通常用于描述存储器的最小可寻址单元,在所有体系结构上不一定是8位。这就是为什么“八位字节”是为了避免任何含糊
PJK

6
@PJK,不,不完全正确。OCTET这里有一个非常具体的含义,表示<任何8位数据序列>。请参阅w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2
2015年

28

从这里

Content-Length实体标头字段指示发送给接收方的实体的大小(以OCTET的十进制数为单位),如果使用HEAD方法,则指示已发送的实体的大小。该请求是GET。

   Content-Length    = "Content-Length" ":" 1*DIGIT

一个例子是

   Content-Length: 3495

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

任何大于或等于零的Content-Length都是有效值。第4.4节描述了如果没有给出Content-Length时如何确定消息正文的长度。

请注意,此字段的含义与MIME中的相应定义明显不同,MIME是MIME中相应的定义,它是“消息/外部主体”内容类型中使用的可选字段。在HTTP中,只要在传输之前可以确定消息的长度,就应发送该消息,除非4.4节中的规则禁止这样做。

我的解释是,这意味着“在线上”的长度,即*编码后的内容的长度


7
“在电线上”,长度会根据压缩而改变,但是说压缩之前的长度是正确的。
2013年

在Mac / Linux等不同类型的计算机上,Content-Length是否会有所不同?还是在使用其他客户端(例如curl / postman ...)时会有所不同?
卡纳加维卢·苏古玛'17

1
假设所有其他条件保持相等(例如,编码,压缩等),则内容长度应与平台无关。这是来自服务器的标头,因此,假设它不嗅探用户代理并且行为不同,则客户端不应有任何区别。
Daniel Renshaw

8

这个页面

到目前为止,POST最常见的用法是将HTML表单数据提交到CGI脚本。在这种情况下,Content-Type:标头通常是application / x-www-form-urlencoded,而Content-Length:标头给出了URL编码的表单数据的长度(这是有关URL编码的注释)。CGI脚本通过STDIN接收消息正文,并对其进行解码。这是使用POST的典型表单提交:

POST /path/script.cgi HTTP/1.0
From: frog@jmarshall.com
User-Agent: HTTPTool/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 32

5

根据规格

Content-Length实体标头字段指示发送给接收方的实体的大小(以OCTET的十进制数为单位),如果使用HEAD方法,则指示已发送的实体的大小。该请求是GET。

Content-Length    = "Content-Length" ":" 1*DIGIT

一个例子是

Content-Length: 3495

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

任何大于或等于零的Content-Length都是有效值。第4.4节描述了如果没有给出Content-Length时如何确定消息正文的长度。

请注意,此字段的含义与MIME中的相应定义明显不同,MIME是MIME中相应的定义,它是“消息/外部主体”内容类型中使用的可选字段。在HTTP中,只要在传输之前可以确定消息的长度,就应发送该消息,除非4.4节中的规则禁止这样做。


2

Content-Length实体标头字段指示发送给接收方的实体的大小(以OCTET的十进制数为单位),如果使用HEAD方法,则指示已发送的实体的大小。该请求是GET。

Content-Length =“ Content-Length”“:” 1 *数字

一个例子是

内容长度:1024

应用程序应该使用该字段来指示消息正文的传输长度。

在PHP中,您将使用类似这样的东西。

header("Content-Length: ".filesize($filename));

在“内容类型:应用程序/ x-www-form-urlencoded”的情况下,编码数据将发送到指定的处理代理,因此您可以设置要发布的数据的长度或大小。


0

考虑是否有标题,例如:

content-encoding: gzip
content-length: 52098
content-type: text/javascript; charset=UTF-8

内容长度是的大小压缩消息体,在“个八比特组”(即在8位,这恰好是单位“字节”的所有现代计算机)。

实际消息正文的大小可以是其他大小,可能为150280字节。

字符数可能再次不同,也许是150231个字符,因为某些Unicode字符使用多个字节(请注意,UTF-8是标准编码)。

因此,不同的数字取决于您是否关心要传输的数据量,保存的数据量或看到的符号数。当然,不能保证将提供这些标头。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.