transfer-encoding:chunked的含义

转载 2016年05月31日 14:41:30

Transfer-Encoding: chunked 表示输出的内容长度不能确定,普通的静态页面、图片之类的基本上都用不到这个。

但动态页面就有可能会用到,但我也注意到大部分asp,php,asp.net动态页面输出的时候大部分还是使用Content-Length,没有使用Transfer-Encoding: chunked。

不过如果结合:Content-Encoding: gzip 使用的时候,Transfer-Encoding: chunked还是比较有用的。

记得以前实现:Content-Encoding: gzip 输出时,先把整个压缩后的数据写到一个很大的字节数组里(如 ByteArrayOutputStream),然后得到数组大小 -> Content-Length。

如果结合Transfer-Encoding: chunked使用,就不必申请一个很大的字节数组了,可以一块一块的输出,更科学,占用资源更少。

这在http协议中也是个常见的字段,用于http传送过程的分块技术,原因是http服务器响应的报文长度经常是不可预测的,使用Content-length的实体搜捕并不是总是管用。

          分块技术的意思是说,实体被分成许多的块,也就是应用层的数据,TCP在传送的过程中,不对它们做任何的解释,而是把应用层产生数据全部理解成二进制流,然后按照MSS的长度切成一分一分的,一股脑塞到tcp协议栈里面去,而具体这些二进制的数据如何做解释,需要应用层来完成,所以在这之前,一快整体应用层的数据需要等它分成的所有TCP  segment到达对方,重新组装后,应用程序才使用自己的解码方法还原它们。

   HTTP1.1采用了持久的连接,也就是一次TCP的连接不马上释放,允许许多的请求跟响应在一个TCP的连接上发送,所以客户机与服务器需要某种方式来标示一个报文在哪里结束和在下一个报文在哪里开始。简单的方法是使用呢content-length,但这只有当报文长度可以预先判断的时候才起作用,而对于动态的内容或者在发送数据前不能判定长度的情况下,可以使用分块的方法来传送编码。

如图:


Web服务器有时生成HTTPResponse无法在Header就确定消息大小的,这时一般来说服务器将不会提供Content-Length的头信息,而采用Chunked编码动态的提供body内容的长度。

进行Chunked编码传输的HTTP Response会在消息头部设置:

Transfer-Encoding: chunked

表示Content Body将用Chunked编码传输内容。

HTTP响应报文中的chunked

Chunked编码使用若干个Chunk串连而成,由一个标明长度为0的chunk标示结束。每个Chunk分为头部和正文两部分,头部内容指定下一段正文的字符总数(十六进制的数字)和数量单位(一般不写),正文部分就是指定长度的实际内容,两部分之间用回车换行(CRLF)隔开。在最后一个长度为0的Chunk中的内容是称为footer的内容,是一些附加的Header信息(通常可以直接忽略)。

HTTP响应报文中的chunked



这里面只有一个有意义的chunke以及一个footer。第一个chunk,头部是3134这两个字节,表示的是1和4这两个ascii字符,被http协议解释为十六进制数14,也就是十进制的20。后面紧跟0d0a,再接着是20个字节的chunk正文(图中的011e~0131)。

后面再接着0d0a,然后就是footer了,30表示ascii字符0,http解释为长度是0(也说明了这是最后一个chunk),后面紧跟0d0a,然后正文部分为空,再接0d 0a表示结束

Transfer-Encoding:chunked 说明

参考:http://blog.csdn.net/wy5761/article/details/17568851 先说解决方法:::不让服务器返回Transfer-Encoding:c...
  • yangyangye
  • yangyangye
  • 2014年03月27日 11:47
  • 1578

关于Transfer-Encoding: chunked类型的数据的解析

最近在写一个http文件下载模块,其中需要解析Transfer-Encoding: chunked类型的数据,找了一些相关的资料。 http://blog.csdn.net/zhangboyj/ar...
  • liziyun537
  • liziyun537
  • 2012年05月31日 16:31
  • 4833

关于Http中Transfer-Encoding: chunked问题

Http1.1中新增加内容, Transfer-Encoding: chunked   译为:分包传输  进行一次请求时,如果数据量较大,为了加快页面显示,而采取了分包的策略 在.net中...
  • yuzehome
  • yuzehome
  • 2017年01月05日 18:43
  • 938

http 协议 通用信息头 Transfer-Encoding: chunked

client 向server发送请求与 server向client向返回响应,在消息头当中均可以包含 Transfer-Encoding: chunked 作用:描述消息实体的长度 有什么用: ...
  • px348402717
  • px348402717
  • 2016年10月05日 22:45
  • 2035

Transfer-Encoding:chunked 返回数据过长导致中文乱码

最近在写一个项目的后台时,前端请求指定资源后,返回JSON格式的数据,突然发现在返回的字节数过大时,最后的message中文数据乱码了,对于同一个接口的请求:当数据小时不会乱码,当数据量大了中文就乱码...
  • No_Endless
  • No_Endless
  • 2017年03月24日 20:58
  • 2394

取消掉Transfer-Encoding:chunked

先说解决方法:::不让服务器返回Transfer-Encoding:chunked,在客户端请求的时候可以使用http 1.0的协议。 有时候,Web服务器生成HTTP Response...
  • qq263229365
  • qq263229365
  • 2013年10月29日 11:23
  • 1948

http协议Chunked transfer encoding

好长时间没有写博客,一是前段时间太忙,二是最近在看一些机器学习方面的内容。 其实在刚开始接触http 1.1协议的时候就了解了这个属性(chunked) ,只是当时并为太在意,直到前段时间工...
  • cuidongdong1234
  • cuidongdong1234
  • 2013年12月02日 23:19
  • 1543

.net 解析Transfer-Encoding:chunked 秒掉网上无用方案

昨天在爬数据时,发现某个网站Response.Get过来的数据一直是为空。当时就很奇怪,认真看下了响应头。发现Transfer-Encoding:chunked这个玩意 网上查了下资料 一般情况H...
  • huyingqi0418
  • huyingqi0418
  • 2017年04月01日 10:55
  • 229

【HTTP协议】Transfer-Encoding: chunked 长度不确定的http报文

Transfer-Encoding: chunked 表示输出的内容长度不能确定,普通的静态页面、图片之类的基本上都用不到这个。 但动态页面就有可能会用到,但我也注意到大部分asp,php,as...
  • zhubosa
  • zhubosa
  • 2016年10月26日 11:05
  • 1170

http返回头中content-length与Transfer-Encoding: chunked的问题

通常,HTTP协议中使用Content-Length这个头来告知数据的长度。然后,在数据下行的过程中,Content-Length的方式要预先在服务器中缓存所有数据,然后所有数据再一股脑儿地发给客户端...
  • zhouxj0818
  • zhouxj0818
  • 2016年08月31日 12:07
  • 505
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:transfer-encoding:chunked的含义
举报原因:
原因补充:

(最多只允许输入30个字)