Http 响应头中Transfer-Encoding: chunked
2015-01-28 17:05
405 查看
在http 的响应头中有时会见到这样的字段:Transfer-Encoding: chunked,这是一种分段传输数据的方式。如果对此格式不了解,直接将响应体以某一编码转换成字符串,就会出现乱码。result = new String(data, "utf-8");data为接受的数据。
分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制,允许HTTP由网
页服务器发送给客户端应用(
通常是网页浏览器)的数据可以分成多个部分。分块传输编码只在HTTP协议1.1版本(HTTP/1.1)中提供。
通常,HTTP应答消息中发送的数据是整个发送的,Content-Length消息头字段表示数据的长度。数据的长度很重要,因为客户端需要知道哪里是应答消息的结束,以及后续应答消息的开始。然而,使用分块传输编码,数据分解成一系列数据块,并以一个或多个块发送,这样服务器可以发送数据而不需要预先知道发送内容的总大小。通常数据块的大小是一致的,但也不总是这种情况。
如果一个HTTP消息(请求消息或应答消息)的Transfer-Encoding消息头的值为chunked,那么,消息体由数量未定的块组成,并以最后一个大小为0的块为结束。
每一个非空的块都以该块包含数据的字节数(字节数以十六进制表示)开始,跟随一个CRLF
(回车及换行),然后是数据本身,最后块CRLF结束。在一些实现中,块大小和CRLF之间填充有白空格(0x20)。
最后一块是单行,由块大小(0),一些可选的填充白空格,以及CRLF。最后一块不再包含任何数据,但是可以发送可选的尾部,包括消息头字段。
消息最后以CRLF结尾。
前两个块的数据中包含有显式的\r\n字符。
应答需要以0长度的块( "0\r\n\r\n".)结束。
参见:http://zh.wikipedia.org/wiki/%E5%88%86%E5%9D%97%E4%BC%A0%E8%BE%93%E7%BC%96%E7%A0%81
分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制,允许HTTP由网
页服务器发送给客户端应用(
通常是网页浏览器)的数据可以分成多个部分。分块传输编码只在HTTP协议1.1版本(HTTP/1.1)中提供。
通常,HTTP应答消息中发送的数据是整个发送的,Content-Length消息头字段表示数据的长度。数据的长度很重要,因为客户端需要知道哪里是应答消息的结束,以及后续应答消息的开始。然而,使用分块传输编码,数据分解成一系列数据块,并以一个或多个块发送,这样服务器可以发送数据而不需要预先知道发送内容的总大小。通常数据块的大小是一致的,但也不总是这种情况。
格式
如果一个HTTP消息(请求消息或应答消息)的Transfer-Encoding消息头的值为chunked,那么,消息体由数量未定的块组成,并以最后一个大小为0的块为结束。每一个非空的块都以该块包含数据的字节数(字节数以十六进制表示)开始,跟随一个CRLF
(回车及换行),然后是数据本身,最后块CRLF结束。在一些实现中,块大小和CRLF之间填充有白空格(0x20)。
最后一块是单行,由块大小(0),一些可选的填充白空格,以及CRLF。最后一块不再包含任何数据,但是可以发送可选的尾部,包括消息头字段。
消息最后以CRLF结尾。
例子
编码的应答
HTTP/1.1 200 OK Content-Type: text/plain Transfer-Encoding: chunked 25 This is the data in the first chunk 1C and this is the second one 3 con 8 sequence 0
编码应答的解释
前两个块的数据中包含有显式的\r\n字符。"This is the data in the first chunk\r\n" (37 字符 => 十六进制: 0x25) "and this is the second one\r\n" (28 字符 => 十六进制: 0x1C) "con" (3 字符 => 十六进制: 0x03) "sequence" (8 字符 => 十六进制: 0x08)
应答需要以0长度的块( "0\r\n\r\n".)结束。
解码的数据
This is the data in the first chunk and this is the second one consequence
参见:http://zh.wikipedia.org/wiki/%E5%88%86%E5%9D%97%E4%BC%A0%E8%BE%93%E7%BC%96%E7%A0%81
相关文章推荐
- HTTP协议扫盲(八 )响应报文之 Transfer-Encoding=chunked方式
- http返回头中content-length与Transfer-Encoding: chunked的问题释疑
- HTTP协议响应头之Transfer-Encoding:分块传输详解
- http返回头中content-length与Transfer-Encoding: chunked的问题释疑
- http返回头中content-length与Transfer-Encoding: chunked的问题释疑
- Tomcat 中响应头信息(Http Response Header) Content-Length 和 Transfer-Encoding 之种种
- PHP header函数设置http报文头示例详解以及解决http返回头中content-length与Transfer-Encoding: chunked的问题
- Tomcat 中响应头信息(Http Response Header) Content-Length 和 Transfer-Encoding
- HTTP 响应头信息(Http Response Header) Content-Length 和 Transfer-Encoding
- 解HTTP协议中的"Transfer-Encoding: chunked"
- 关于Http中Transfer-Encoding: chunked问题
- Tomcat 中响应头信息(Http Response Header) Content-Length 和 Transfer-Encoding 之种种
- http 协议 通用信息头 Transfer-Encoding: chunked
- NSString asscii格式(2进制) 转 utf8格式——解决iOS自己处理http socket数据,遇到Transfer-Encoding: chunked时
- 理解 Http Stream [Transfer-Encoding- chunked]
- http返回头中content-length与Transfer-Encoding: chunked的问题
- NSString asscii格式(2进制) 转 utf8格式——解决iOS自己处理http socket数据,遇到Transfer-Encoding: chunked时
- GET 请求复制转发一直等待响应的问题 Transfer-Encoding: chunked
- Tomcat 中响应头信息(Http Response Header) Content-Length 和 Transfer-Encoding 之种种
- HTTP协议:分块传输编码(Chunked transfer encoding)