为什么http请求的content-length为0 实体是有内容的

在HTTP协议中,有Content-Length的详细解读。Content-Length用于描述HTTP消息实体的传输长度the transfer-length of the message-body。在HTTP协议中,消息实体长度和消息实体的传输长度是有区别,比如说gzip压缩下,消息实体长度是压缩前的长度,消息实体的传输长度是gzip压缩后的长度。
  在具体的HTTP交互中,客户端是如何获取消息长度的呢,主要基于以下几个规则:
  响应为1xx,204,304相应或者head请求,则直接忽视掉消息实体内容。
  如果有Transfer-Encoding,则优先采用Transfer-Encoding里面的方法来找到对应的长度。比如说Chunked模式。
  “如果head中有Content-Length,那么这个Content-Length既表示实体长度,又表示传输长度。如果实体长度和传输长度不相等(比如说设置了Transfer-Encoding),那么则不能设置Content-Length。如果设置了Transfer-Encoding,那么Content-Length将被忽视”。这句话翻译的优点饶,其实关键就一点:有了Transfer-Encoding,则不能有Content-Length。
  Range传输。不关注,没详细看了:)
  通过服务器关闭连接能确定消息的传输长度。(请求端不能通过关闭连接来指明请求消息体的结束,因为这样可以让服务器没有机会继续给予响应)。这种情况主要对应为短连接,即非keep-alive模式。
  HTTP1.1必须支持chunk模式。因为当不确定消息长度的时候,可以通过chunk机制来处理这种情况。
  在包含消息内容的header中,如果有content-length字段,那么该字段对应的值必须完全和消息主题里面的长度匹配。
  “The entity-length of a message is the length of the message-body before any transfer-codings have been applied”
  也就是有chunk就不能有content-length 。

  其实后面几条几乎可以忽视,简单总结后如下:
  1、Content-Length如果存在并且有效的话,则必须和消息内容的传输长度完全一致。(经过测试,如果过短则会截断,过长则会导致超时。)
  2、如果存在Transfer-Encoding(重点是chunked),则在header中不能有Content-Length,有也会被忽视。
  3、如果采用短连接,则直接可以通过服务器关闭连接来确定消息的传输长度。(这个很容易懂)
  结合HTTP协议其他的特点,比如说Http1.1之前的不支持keep alive。那么可以得出以下结论:
  1、在Http 1.0及之前版本中,content-length字段可有可无。
  2、在http1.1及之后版本。如果是keep alive,则content-length和chunk必然是二选一。若是非keep alive,则和http1.0一样。content-length可有可无。

时间: 2024-11-06 13:47:23

为什么http请求的content-length为0 实体是有内容的的相关文章

WCF常见异常-The maximum string content length quota (8192) has been exceeded while reading XML data

异常信息:The maximum string content length quota (8192) has been exceeded while reading XML data 问题:调用第三方的WCF服务,产生上述异常信息 分析: 在公布WCF host端时,要确保host端以及客户端的设置允许一定大小的数据传输. 如果未设置传输大小,maxStringContentLength默认大小为8192. 1)如果第三方服务未设置maxStringContentLength或者设置的maxS

The maximum string content length quota (8192) has been exceeded while reading XML data

原文:The maximum string content length quota (8192) has been exceeded while reading XML data 问题场景:在我们WCF服务发布后,我们要确保服务端以及客户端的配置文件允许合适大小的传输设置.笔者在发布WCF服务时,服务端的绑定未做传输大小的设置(采用了默认,maxStringContentLength默认大小为8192),而我们在传输序列化的数据时,大小超过了这个限制. 读取 XML 数据时,超出最大字符串内容

spark模型error java.lang.IllegalArgumentException: Row length is 0

failure: Lost task 18.3 in stage 17.0 (TID 59784,XXXXX, executor 19): java.lang.IllegalArgumentException: Row length is 0 场景是写入hbase: val put = new Put(Bytes.toBytes(line._1)) 当取出的line._1做为row,值是“”或者null时就会出现此异常.所以做如下处理,先过滤掉为null和“”的数据 val bhaseRdd =

destoon7.0采集会员模块内容出现:用户不存在/未审核

destoon7.0采集会员模块内容出现:用户不存在/未审核问题解决办法 在/include/global.func.php文件下找到: $user = array_merge($r1, $r2, $r3); 改为以下代码: $user = array_merge((array)$r1, (array)$r2, (array)$r3); 原文地址:https://www.cnblogs.com/68xi/p/12233361.html

XMLHttpRequest HTTP请求的返回码为0 http status = 0

由于用户在http返回前关闭/取消,或者防火墙等原因,会造成http请求没有status信息.w3c有相应的说明:http://www.w3.org/TR/XMLHttpRequest/#the-status-attribute 4.7.1 The status attribute client . status Returns the HTTP status code. The status attribute must return the result of running these s

hiho_1059_string matching content length

题目大意 两个字符串strA和strB(长度最大为2100),他们中按照顺序有一些公共的子串,且公共子串的长度大于等于3,否则不认为是合法的,比如 abcdef 和 abcxcdef, 按照顺序有合法公共子串abc def 或者 cdef.     按照顺序取出一些公共子串,有不同的取法,求这些取法中公共子串长度之和的最大值. 题目分析 字符串长度最大为2100,因此直接枚举搜索会超时,考虑使用动态规划,且复杂度要降到 O(n^3) 甚至 O(n^2). 用状态 dp[i][j][0] 表示st

deploy: [mkdir] Created dir: C:\Program Files\Java\apache-cxf-2.4.2\samples\java_first_pojo\build [loadfile] Do not set property srcbuild.classpath as its length is 0.

使用CXF的错误,错误是说我的路径有错误,因为路径错误所以无法运行程序 (1)原因,我将其放入了Program Files文件夹下,所以,其不好使 分析原因: 目录路径错误,目录中不能有空格,否则其解析器无法解析 解决方法: 更改使用的目录,改为C:\apache-cxf-2.4.2\samples\java_first_pojo问题解决 (2)另一个问题.Apache CXF requires Java versio n 1.5 or higher. You are currently usi

HttpWebRequest请求时无法发送具有此谓词类型的内容正文。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(postUrl); //--需要封装的参数 request.CookieContainer = new CookieContainer(); CookieContainer cookie = request.CookieContainer;//如果用不到Cookie,删去即可 //以下是发送的http头 request.Referer = ""; request.Acc

精通Web Analytics 2.0 (2) 内容简介

精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 What’s Inside the Book? This book builds on the foundation laid by my first book, Web Analytics: An Hour a Day. I am not going to beat around the bush; Chapter 1 starts with a bang by introducing you to the Web Ana