【问题标题】:What's the "Content-Length" field in HTTP header?HTTP 标头中的“Content-Length”字段是什么?
【发布时间】:2011-02-15 22:25:27
【问题描述】:

什么意思?

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

尤其是Content-Type: application/x-www-form-urlencoded

【问题讨论】:

    标签: http-headers


    【解决方案1】:

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

    【讨论】:

    • 而不是“请求或响应”,它不只是“响应的主体”吗?请求的标头和数据之间没有空行。
    • 我可以更改java过滤器中的HTTP响应头内容长度吗
    • @ajfbiw.s 考虑一个 http post 请求。 “请求中消息体的存在是通过在请求的消息头中包含 Content-Length 或 Transfer-Encoding 头字段来表示的。”来自w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.3
    【解决方案2】:

    rfc2616

    Content-Length entity-header 字段表示 entity-body,十进制的八进制数,发送给接收者,或者,在 在 HEAD 方法的情况下,实体主体的大小将 如果请求是 GET,则已发送。

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

    扩展名为post below

    【讨论】:

    • 将此答案与 Tom Cabanski 的答案结合起来,您将获得所需的所有信息。如果是文本,您可以计算字符数,因为 ASCII 是 8 位。
    • @hcpl:但文本不一定总是 ASCII,ASCII 也是 7 位,而不是 8 位。
    • 用您使用的任何编码替换 ASCII 并查找编码所需的位数。对于 7 对 8 位响应;最初它确实是 7 位,所以你又是对的。但是今天,由于计算机内存的组织方式,大多数(如果不是全部)情况下都使用 8 位。编辑:重读我的答案,我知道你要去哪里。我应该改写我原来的评论。
    • @hcpl:字节与字符问题之所以重要的全部原因是由于可变宽度编码,如 UTF-8 和 UTF-16,其中“位数”不固定。跨度>
    【解决方案3】:

    Content-Length 标头是一个数字,表示 HTTP 正文的确切字节长度。 HTTP 正文在开始行和标头之后的第一个空行之后立即开始。

    一般Content-Length标头用于HTTP 1.1,以便接收方知道当前响应何时完成*,所以connection can be reused for another request

    * ...或请求,对于具有主体的请求方法,例如 POST、PUT 或 PATCH

    或者,Content-Length 标头可以省略,并且可以使用分块的Transfer-Encoding header

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

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

    HTTP Made Really Easy.

    【讨论】:

    • “Content-Length 标头可以省略,可以使用分块的 Transfer-Encoding 标头”:字面上节省了我的一天。非常感谢。
    【解决方案4】:

    一个八位组是 8 位。 content-length 是消息正文所代表的八位字节数。

    【讨论】:

    • @ViniciusPires 'byte' 通常用于描述最小的可寻址内存单元,在所有架构上不一定是 8 位。这就是为什么使用“八位字节”来避免任何歧义
    • @PJK,不,不完全正确。 OCTET 这里有一个非常具体的含义,意思是。请参阅w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2 处的定义
    【解决方案5】:

    From here:

    Content-Length 实体标头字段 表示实体的大小, 十进制的八进制数,发送到 收件人,或者,如果是 HEAD方法,大小 将被发送的实体主体 如果请求是 GET。

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

    一个例子是

       Content-Length: 3495
    

    应用程序应该使用这个字段来 表示的传输长度 消息体,除非这是 被section 4.4 中的规则禁止。

    任何内容长度大于或 等于零是一个有效值。 第 4.4 节描述了如何确定 消息体的长度,如果 a 没有给出内容长度。

    注意这个字段的含义是 明显不同于 MIME中的相应定义, 它是使用的可选字段 在“消息/外部正文”中 内容类型。在 HTTP 中,它应该是 只要消息的长度可以发送 在被确定之前 转移,除非这是被禁止的 根据第 4.4 节中的规则。

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

    【讨论】:

    • “在线上”,长度会根据压缩的不同而改变,但在压缩前说长度是正确的。
    • Content-Length 在 Mac/Linux 等不同类型的机器上会有所不同吗?或者在使用 curl/postman 等不同的客户端时会有所不同吗?
    • 假设所有其他条件保持不变(例如编码、压缩等),那么内容长度应该与平台无关。这是来自服务器的标头,因此,假设它不嗅探用户代理并且行为不同,客户端不应该有任何区别。
    【解决方案6】:

    来自this page

    到目前为止,POST 最常见的用法是, 是将HTML表单数据提交给CGI 脚本。在这种情况下, Content-Type: header 通常是 应用程序/x-www-form-urlencoded, 并且 Content-Length: 标头给出 URL 编码形式的长度 数据(这里是关于 URL 编码的注释)。 CGI 脚本接收消息 体通过标准输入,并对其进行解码。 这是一个典型的表单提交, 使用 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
    

    【讨论】:

      【解决方案7】:

      根据spec

      Content-Length entity-header 字段指示发送给接收者的实体主体的大小,以十进制的八进制数表示,或者在 HEAD 方法的情况下,实体主体的大小将具有如果请求是 GET,则已发送。

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

      一个例子是

      Content-Length: 3495
      

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

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

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

      【讨论】:

        【解决方案8】:

        考虑是否有以下标题:

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

        content-length压缩 消息体的大小,以“八位字节”为单位(即以 8 位为单位,恰好是“字节”所有现代计算机)。

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

        字符的数量又可以不同,可能是 150231 个字符,因为一些 unicode 字符使用多个字节(注意 UTF-8 是标准编码)。

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

        【讨论】:

          【解决方案9】:

          Content-Length entity-header 字段指示发送给接收者的实体主体的大小,以十进制的八进制数表示,或者在 HEAD 方法的情况下,实体主体的大小将具有如果请求是 GET,则已发送。

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

          一个例子是

          内容长度:1024

          应用程序应该使用这个字段来指示消息体的传输长度。

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

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

          在“Content-Type: application/x-www-form-urlencoded”的情况下,编码数据被发送到指定的处理代理,因此您可以设置要发布的数据的长度或大小。

          【讨论】:

            猜你喜欢
            • 2010-10-01
            • 1970-01-01
            • 2021-01-08
            • 1970-01-01
            • 2013-04-06
            • 2014-09-02
            • 2011-08-28
            • 2015-03-05
            • 2018-09-30
            相关资源
            最近更新 更多