[历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2018-07-06 标题[转]HTTP协议的chunked编码分类编程 标签http-chunkedHTTP chunked传输编码简单笔记本文参考《 https://www.cnblogs.com/jiu0821/p/5833759.html 》《 https://blog.csdn.net/u013401853/article/details/53432408 》《 https://blog.csdn.net/u014558668/article/details/70141956 》一般情况HTTP的Header包含Content-Length域来指明报文体的长度。如有时候服务生成HTTP回应是无法确定消息大小的比如大文件的下载或者后台需要复杂的逻辑才能全部处理页面的请求这时用需要实时生成消息长度服务器一般使用chunked编码。在进行Chunked编码传输时在回复消息的Headers有transfer-coding域值为chunked表示将用chunked编码传输内 容。使用chunked编码的Headers如下可以利用FireFox的FireBug插件或HttpWatch查看Headers信 息HttpWatch还可以查看chunked的个数分块传输编码Chunked transfer encoding是超文本传输协议HTTP中的一种数据传输机制允许HTTP由网页服务器发送给客户端应用 通常是网页浏览器的数据可以分成多个部分。分块传输编码只在HTTP协议1.1版本HTTP/1.1中提供。通常HTTP应答消息中发送的数据是整个发送的Content-Length消息头字段表示数据的长度。数据的长度很重要因为客户端需要知道哪里是应答消息的结束以及后续应答消息的开始。然而使用分块传输编码数据分解成一系列数据块并以一个或多个块发送这样服务器可以发送数据而不需要预先知道发送内容的总大小。通常数据块的大小是一致的但也不总是这种情况。在进行chunked编码传输时在回复消息的头部有Transfer-Encoding: chunked编码使用若干个chunk组成由一个标明长度为0的chunk结束。每个chunk有两部分组成第一部分是该chunk的长度第二部分就是指定长度的内容每个部分用CRLF隔开。在最后一个长度为0的chunk中的内容是称为footer的内容是一些没有写的头部内容。chunk编码格式如下[][][][][][]chunk size是以十六进制的ASCII码表示chunk数据以0长度的chunk块结束。例子HTTP/1.1 200 OKContent-Type: text/plainTransfer-Encoding: chunked25This is the data in the first chunk1Cand this is the second one3con8sequence0编码应答的解释前两个块的数据中包含有显式的字符。This is the data in the first chunk (37 字符 十六进制: 0x25)and this is the second one (28 字符 十六进制: 0x1C)“con” ( 3 字符 十六进制: 0x03)“sequence” ( 8 字符 十六进制: 0x08)应答需要以0长度的块 0.结束。解码的数据This is the data in the first chunkand this is the second oneconsequence