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

Transfer-Encoding: chunked

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

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

  Chunked-Body = *chunk
"0" CRLF
footer
CRLF
chunk = chunk-size [ chunk-ext ] CRLF
chunk-data CRLF

  hex-no-zero = <HEX excluding "0">

  chunk-size = hex-no-zero *HEX
chunk-ext = *( ";" chunk-ext-name [ "=" chunk-ext-value ] )
chunk-ext-name = token
chunk-ext-val = token | quoted-string
chunk-data = chunk-size(OCTET)

  footer = *entity-header

RFC文档中的Chunked解码过程如下:
length := 0
read chunk-size, chunk-ext (if any) and CRLF
while (chunk-size > 0) {
read chunk-data and CRLF
append chunk-data to entity-body
length := length + chunk-size
read chunk-size and CRLF
}
read entity-header
while (entity-header not empty) {
append entity-header to existing header fields
read entity-header
}
Content-Length := length
Remove "chunked" from Transfer-Encoding

最后提供一段PHP版本的chunked解码代码:

$chunk_size = (integer)hexdec(fgets( $socket_fd, 4096 ) );
while(!feof($socket_fd) && $chunk_size > 0) {
    $bodyContent .= fread( $socket_fd, $chunk_size );
    fread( $socket_fd, 2 ); // skip \r\n
    $chunk_size = (integer)hexdec(fgets( $socket_fd, 4096 ) );
}

HTTP Response中的Chunked编码相关推荐

  1. php 禁用 chunked,php下HTTP Response中的Chunked编码实现方法

    进行Chunked编码传输的HTTP Response会在消息头部设置: Transfer-Encoding: chunked 表示Content Body将用Chunked编码传输内容. Chunk ...

  2. HTTP协议中的chunked编码解析

    " HTTP协议中的chunked传输编码全接触." 在HTTP协议中,服务器发往客户端的数据中,通常都包括HTTP头和HTTP体,当存在HTTP体的时候,HTTP体的长度通常是由 ...

  3. java chunked编码解码_HTTP协议中的CHUNKED编码解析

    HTTP协议中的TRANFER-ENCODING:CHUNKED编码解析 通常情况下,Transfer-Encoding域的值应当为chunked,表明采用chunked编码方式来进行报文体的传输.c ...

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

    转载请注明出处 http://blog.csdn.net/yankai0219/article/details/8269922 0.序 1.http/1.1协议中与chunked编码的相关字段 1)E ...

  5. java chunked编码解码_HTTP1.1中CHUNKED编码方式传输数据的解析

    "隐网项目"的图片下载模块需要与HTTP Response报文打交道,由于使用的是C++,没有java中十分好用的httpclient,所以打算自己实现.之前考虑的比较简单,假设请 ...

  6. HTTP协议中的Tranfer-Encoding:chunked编码解析

    当不能预先确定报文体的长度时,不可能在头中包含Content-Length域来指明报文体长度,此时就需要通过Transfer-Encoding域来确定报文体长度.     通常情况下,Transfer ...

  7. HTTP1.1中CHUNKED编码解析(转载)

    HTTP1.1中CHUNKED编码解析 一般HTTP通信时,会使用Content-Length头信息性来通知用户代理(通常意义上是浏览器)服务器发送的文档内容长度,该头信息定义于HTTP1.0协议RF ...

  8. linux解码base64工具,如何解码Linux中的base64编码行?(How do I decode base64 encoded lines in linux?)...

    如何解码Linux中的base64编码行?(How do I decode base64 encoded lines in linux?) 我正在尝试读取文件并仅提取base64编码部分. 我通过使用 ...

  9. java 转码%2f%_JS和JAVA中常用的编码转码函数

    js中escape,encodeURI,encodeURIComponent函数和unescape,decodeURI和decodeURIComponent函数的功能 1.escape方法对Strin ...

最新文章

  1. 反弹和补遗:再论Bjarne Stroustrup的基于对象的含义
  2. 回顾2016,展望2017
  3. 软件工程中的启发规则
  4. 当电压放大电路的开路增益和输出电阻固定后_晶体管放大电路的性能分析与应用...
  5. 好吧,你说简单就简单,但简单的事,不要变成本能,要常思常变
  6. 什么是共享读锁和排他写锁?
  7. 最全面、最详细web前端面试题及答案总结
  8. CAD中如何旋转图片
  9. 抛弃Visio,遇上效率作图工具Edraw亿图图示
  10. 赢在项目工具的落地-讲师团俊平老师主讲
  11. 基于PHP+MySQL托管中心管理系统的设计与实现
  12. 注册【小程序】和注册页面
  13. [RK3288][Android6.0] USB OTG模式及切换
  14. 用计算机制作动画,什么是计算机动画制作
  15. Revi+Geometry属性的参数
  16. 警告:No archetype found in remote catalog. Defaulting to internal catalo在远程目录中没有找到原型。默认为内部编录
  17. Windows神器 微信对话视频生成器
  18. 【连载】【FPGA黑金开发板】NIOS II那些事儿--串口实验(六)
  19. 熔盐储能系统市场调研
  20. 初识 web workers

热门文章

  1. c语言程序设计课件数组,第五章 数组_《C语言程序设计(Visual C++ 6.0环境)》电子教案_ppt_大学课件预览_高等教育资讯网...
  2. 未来的计算机老素描画,考试这么无聊?学生把手画成“平面”,老师:未来的“美术大师”...
  3. iis+php解析漏洞修复,IIS7.0畸形解析漏洞通杀0day
  4. vue 怎么全局到入常量_午后躺椅上看关于Vue的20点
  5. 计算机视觉 专业术语,计算机视觉专业相关术语中英文对照5
  6. opencv获取图像像素值的坑
  7. enspar启动失败40_负债80万开始爆仓,快40岁的人了没钱创业,精神恍惚该怎么翻身?...
  8. 基于python的数据分析方法五种_利用Python进行数据分析 第5章 pandas入门(1)
  9. libcurl 编程进度条和range请求源码示例
  10. Zookeeper ZAB协议原理浅析