http 响应头里面Content-Length字段详解
来源:互联网 发布:和人工智能相关的专业 编辑:程序博客网 时间:2024/06/06 02:59
对于http的请求返回结果要进行内容的长度校验主要有两种方式,二者互斥使用
1.客户端在http头(head)加Connection:keep-alive时,服务器的response是Transfer-Encoding:chunked的形式,通知页面数据是否接收完毕,例如长连接或者程序运行中可以动态的输出内容,例如一些运算比较复杂且需要用户及时的得到最新结果,那就采用chunked编码将内容分块输出。
2.除了如1所述之外的情况一般都是可以获取到Content-Length的。
在HTTP协议中,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可有可无我总结我的例子 如果 要是 js css html 这样的文件的话 会返回 contengt-length 字节 前提是 nginx 里的gzip off 如果是on 的话 返回 chunk
执行的如果是 动态 脚本的话, 还是返回chunk 前提是 content:keep-alive 如果不是长连接的话 返回的头里面没有content-leght ()
- http 响应头里面Content-Length字段详解
- http 响应头里content-length 的几种情况
- http 头里没有content-length属性
- http 响应头里 没有 或者有 content-length 的几种可能性
- http 响应头里 没有 或者有 content-length 的几种可能性
- http 响应头里 没有 或者有 content-length 的几种可能性
- 最近在改一个网站、有用到 http 响应头里 没有 或者有 content-length 的几种可能性
- HTTP协议首部字段transfer-encoding与content-length差异
- http头content-length
- HTTP之Content-Length
- HTTP之Content-Length
- HTTP之Content-Length
- Http协议Content-Length
- HTTP 411 Content-Length required
- java_Web14-Http响应头字段详解
- HTTP详解--响应首部字段(11)
- Tomcat 中响应头信息(Http Response Header) Content-Length 和 Transfer-Encoding 之种种
- Tomcat 中响应头信息(Http Response Header) Content-Length 和 Transfer-Encoding 之种种
- 2013 Multi-University Training Contest 4
- 学习FFmpeg API – 解码视频
- file 标签上传文件,直接样式太难看!隐藏它,通过别的按钮触发它,又会有IE兼容问题。
- android下的中文乱码问题
- Kinect实现简单的三维重建
- http 响应头里面Content-Length字段详解
- web应用国际化
- Scala 函数柯里化(Function currying)
- 重学java23种设计模式-提纲
- c primer plus9.1练习题
- Linux-2.6.20的cs8900驱动分析(三)
- 黑马程序员--OC笔记
- 学习二叉树重建
- 【排错】Failed to replace a bad datanode on the existing pipeline due to no more good ...