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

Eon*_*nil 264 http-headers

这是什么意思?

  1. 编码内容字符串的字节数,具有在标头中指定的编码.
  2. 内容字符串的字符数.

特别是在"Content-Type:application/x-www-form-urlencoded"的情况下.

Tom*_*ski 251

它是请求或响应正文中的数据字节数.正文是标题下方空白行后面的部分.

  • 它不是“请求或响应”,而是“响应的正文”吗?该请求的标头和数据之间没有空行。 (2认同)
  • @ ajfbiw.s考虑一个http post请求."通过在请求的消息头中包含Content-Length或Transfer-Encoding头字段来表示请求中是否存在消息正文."来自https://www.w3.org/Protocols/rfc2616/ RFC2616-sec4.html#sec4.3 (2认同)

Whi*_*ind 221

RFC2616

The Content-Length entity-header field indicates the size of the entity-body,
in decimal number of OCTETs, sent to the recipient or, in the case of the HEAD
method, the size of the entity-body that would have been sent had the request
been a GET. 
Run Code Online (Sandbox Code Playgroud)

内容类型是什么并不重要.

下面的帖子扩展.

  • 将这个答案与Tom Cabanski的答案结合起来,您就拥有了所需的所有信息.如果是文本,您可以计算字符数,因为ASCII是8位. (14认同)
  • @hcpl:但是文本不一定总是ASCII,ASCII也是7位,而不是8. (8认同)
  • @hcpl:字节与字符问题重要的全部原因是由于UTF-8和UTF-16等可变宽度编码,其中"位数"不固定. (4认同)
  • 用您正在使用的任何编码替换ASCII,并查找编码所需的位数.对于7对8位响应; 最初它确实是7位,所以你再次正确.但是,由于计算机内存的组织方式,今天在大多数(如果不是全部)情况下使用了8位.编辑:重读我的回答我看到你要去的地方.我应该改写一下原来的评论. (2认同)
  • 你能打造这个数字吗?比如POST一个字符串参数很长但是你的内容长度设置为1? (2认同)

spe*_*der 60

所述Content-Length报头是一个数字表示的HTTP主体的精确字节长度.HTTP主体在起始行和标题之后找到的第一个空行后立即启动.

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

* ...或请求,如果是具有正文的请求方法,例如POST,PUT或PATCH

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

如果缺少两个Content-LengthTransfer-Encoding标头,则在响应结束时必须关闭连接.

  • “Content-Length 标头可以省略,并且可以使用分块的 Transfer-Encoding 标头”:字面上拯救了我的日子。太感谢了。 (3认同)

its*_*ect 44

一个八位字节是8位.Content-length是消息正文表示的八位字节数.

  • @ViniciusPires'byte'通常用于描述最小的可寻址存储单元,在所有架构上不一定是8位.这就是为什么'octet'被用来避免任何歧义 (73认同)
  • Octet = AKA Byte? (35认同)
  • @PJK,不,不是*完全正确.这里的"OCTET"具有**非常具体的含义**,意味着<任何8位数据序列>.请参阅http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2上的定义 (4认同)

Dan*_*haw 28

从这里:

内容长度实体头字段指示实体主体的大小,以字节为单位的十进制数,发送到接收方,或在HEAD方法的情况下,这将被发送的实体主体的大小有请求是GET.

   Content-Length    = "Content-Length" ":" 1*DIGIT
Run Code Online (Sandbox Code Playgroud)

一个例子是

   Content-Length: 3495
Run Code Online (Sandbox Code Playgroud)

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

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

请注意,此字段的含义与MIME中的相应定义明显不同,后者是"message/external-body"内容类型中使用的可选字段.在HTTP中,只要在传输之前确定消息的长度,就应该发送它,除非第4.4节中的规则禁止这样做.

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

  • "在线上",长度会根据压缩而改变,但在压缩之前说长度是正确的. (7认同)
  • 假设所有其他条件保持相同(例如编码、压缩等),那么内容长度应该与平台无关。这是来自服务器的标头,因此假设它没有嗅探用户代理并且行为不同,则客户端不应该有任何区别。 (2认同)

ben*_*min 12

考虑一下您是否有以下标题:

content-encoding: gzip
content-length: 52098
content-type: text/javascript; charset=UTF-8
Run Code Online (Sandbox Code Playgroud)

内容长度是压缩消息正文的大小,以“八位字节”为单位(即以 8 位为单位,对于所有现代计算机来说恰好是“字节”)。

实际消息正文的大小可以是其他值,也许是 150280 字节

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

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


The*_*esa 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
Run Code Online (Sandbox Code Playgroud)


Boz*_*sov 6

根据规范

Content-Length entity-header 字段指示发送给接收者的实体主体的大小,以十进制的 OCTET 数表示,或者在 HEAD 方法的情况下,本应发送的实体主体的大小请求是 GET。

Content-Length    = "Content-Length" ":" 1*DIGIT
Run Code Online (Sandbox Code Playgroud)

一个例子是

Content-Length: 3495
Run Code Online (Sandbox Code Playgroud)

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

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

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


小智 6

Content-Length 实体标头字段指示发送给接收者的实体主体的大小(以十进制数的八位字节数表示),或者在 HEAD 方法的情况下,指示已发送的实体主体的大小该请求是 GET。

内容长度 = "内容长度" ":" 1*DIGIT

一个例子是

内容长度:1024

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

在 PHP 中你会使用类似这样的东西。

header("Content-Length: ".filesize($filename));
Run Code Online (Sandbox Code Playgroud)

如果是“Content-Type: application/x-www-form-urlencoded”,则编码数据将发送到指定的处理代理,以便您可以设置要发布的数据的长度或大小。