关闭

Http协议Content-Length

205人阅读 评论(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可有可无。

0
0
查看评论

文章5:http协议中content-length 以及chunked编码分析

转载请注明出处 http://blog.csdn.net/yankai0219/article/details/8269922  0.序 1.http/1.1协议中与chunked编码的相关字段 1)Entity Body 2)Content-leng...
  • yankai0219
  • yankai0219
  • 2012-12-07 16:14
  • 55735

HTTP之Content-Length

10 一 12 杂谈Nginx与HTTP协议 在项目中遇到一个问题,需要详细了解下HTTP协议及其Nginx中对HTTP协议的支持程度。今天一天收集了一些资料,也梳理出最终方案。记录到博客上,方便后续查阅。重点关注以下几个方面:1、Http交互中如何判定内容的长度及其HTTP协议中关...
  • pud_zha
  • pud_zha
  • 2013-04-16 16:52
  • 39036

http协议中content-length 以及chunked编码分析

http://blog.sae.sina.com.cn/archives/3795 http协议中content-length 以及chunked编码分析 05/08. 2014 0.序 1.http/1.1协议中与chunked编码的相关字段 ...
  • wangyin159
  • wangyin159
  • 2015-08-07 10:16
  • 824

Http协议中关于Content-Length和Chunk

今天面试遇到一个问题,HTTP协议中 content-length与chunk的区别 以前学校Ajax的时候遇到过content-length的用法,但是chunk以前只是有点印象,今晚特地来了解一波。 参考链接:http://www.kafan.cn/edu/45992664.html 1、con...
  • b2997215859
  • b2997215859
  • 2016-04-16 20:13
  • 2073

http 响应头里面Content-Length字段详解

对于http的请求返回结果要进行内容的长度校验主要有两种方式,二者互斥使用 1.客户端在http头(head)加Connection:keep-alive时,服务器的response是Transfer-Encoding:chunked的形式,通知页面数据是否接收完毕,例如长连接或者程序运行...
  • CodeHeng
  • CodeHeng
  • 2015-07-15 16:28
  • 9002

Nginx与HTTP协议,content-length

在项目中遇到一个问题,基于Android的apache httpdclient 无法获取到响应的content-length,通过排查确定是http协议的问题,详细了解下HTTP协议及其Nginx中对HTTP协议的支持程度。 重点关注以下几个方面:1、Http交互中如何判定...
  • jinkenfeng
  • jinkenfeng
  • 2015-09-22 15:29
  • 1274

nginx的Content-length 和 chunk

nginx 有支持http1.0 和http 1.1。 http1.0 协议是短连接,一般的服务器。一次通信后,连接会close。http 头的域 Connection:close http1.1 协议对1.0作了扩展。 为了更好利用连接,http1.1 不会立马关闭连接,而是复用连接。 ht...
  • allenCwl
  • allenCwl
  • 2016-11-19 19:56
  • 1157

http 协议中的content length是什么意思?

http 协议中的content length是什么意思? 2011-06-09 22:39wangsufu77  分类:编程语言 | 浏览 15126 次  编程语言互联网 假如是100K的话,是不是这这个POST请求中只能容纳100的长度?...
  • wangyin159
  • wangyin159
  • 2015-07-30 09:02
  • 1100

关于Content-Length

关于Content-Length 1.当客户端请求时是Connection: keep-alive的时候,服务器返回的形式Transfer-Encoding: chunked的形式,以确保页面数据是否结束,长连接就是这种方式,用chunked形式就不能用content-length...
  • jgwei
  • jgwei
  • 2012-02-24 10:38
  • 13273

http 请求头中没有Content-length

<br /><br />在J2ME的开发中,我遇到了一个问题,我的HTTP请求中没有Content-Length属性。而服务器端需要这个属性的值。<br />首先说解决方法:<br />将程序中的flush语句去掉即可。<br />...
  • nairuohe
  • nairuohe
  • 2010-09-02 10:53
  • 13437
    个人资料
    • 访问:218725次
    • 积分:5540
    • 等级:
    • 排名:第5727名
    • 原创:326篇
    • 转载:192篇
    • 译文:1篇
    • 评论:15条
    文章分类