在网上找了好一会,始终没发现有解析Chunked编码的文章,那就自己写一个吧,呵呵。
网上使用Chunked编码的网站似乎并不是很多,除了那些使用GZip压缩的网站,例:google.com,还有就是大部分打开GZip压缩的PHP论坛。
根据本人的理解,使用Chunked编码的主要好处就在于一些程序的运算出过程中,可以动态的输出内容。
例如,要在后台处理一个小时的运算,但又不希望用户等一个小时才能看到结果。这时就可采用Chunked编码将内容分块输出,用户随时都可以接收到最新的处理结果。
ASP关闭了缓存的输出模式,就是Chunked编码的。(Response.Buffer = false)
而每一次的Response.Write,都是一个Chunked,所以不要使用的太频繁哦,否则Chunk数量太多,额外的数据太浪费空间了。
若想了解Chunked的具体编码结构,用ASP关闭缓存调试蛮方便的。:)
我们先来看看RFC2616中对Chunked的定义:
Chunked-Body = *chunk
last-chunk
trailer
CRLF
chunk = chunk-size [ chunk-extension ] CRLF
chunk-data CRLF
chunk-size = 1*HEX
last-chunk = 1*("0") [ chunk-extension ] CRLF
chunk-extension= *( ";" chunk-ext-name [ "=" chunk-ext-val ] )
chunk-ext-name = token
chunk-ext-val = token | quoted-string
chunk-data = chunk-size(OCTET)
trailer = *(entity-header CRLF)
我们来模拟一下数据结构:
[Chunk大小][回车][Chunk数据体][回车][Chunk大小][回车][Chunk数据体][回车][0][回车]
注意chunk-size是以十六进制的ASCII码表示的,比如86AE(实际的十六进制应该是:38366165),计算成长度应该是:34478,表示从回车之后有连续的34478字节的数据。
跟踪了www.yahoo.com的返回数据,发现在chunk-size中,还会多一些空格。可能是固定长度为7个字节,不满7个字节的,就以空格补足,空格的ASCII码是0x20。
以下是解码过程的伪代码:
length := 0//用来记录解码后的数据体长度
read chunk-size, chunk-extension (if any) and CRLF//第一次读取块大小
while (chunk-size > 0) {//一直循环,直到读取的块大小为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//头标记中移除Transfer-Encoding
有空再研究一下GZip+Chunked是如何编码的,估计是每个Chunk块进行一次GZip独立压缩。
使用了Chunked,自然会在性能上稍微打点折扣,因为比正常的数据体多出了一些额外的消耗。
但是有一些情况下,必需要使用分块输出,这也是不得已而为之~^_^
转自:http://hi.baidu.com/zkheartboy/blog/item/9216a0fd05591e1508244d74.html
相关推荐
HTTP协议的chunked编码
HTTP协议的chunked编码
关于socket里chunk问题的解决
前一段时间有人说自己碰到了http协议里的chunk问题,其实你自己实现chunk也可以,就是做个状态位的判断是了。本人实现过,在WTK虚拟机还没有公开的时候,但是wtk公开了你就用wtk里面的源马吧,写的很好,不过公开的代码里竟然少了行代码,这是在让我纳闷,不知道sun是故意的还是粗心,下面的代码增加了proxy支持,实在原有基础上改的,此代码已经应用很多应用,各位网友放心使用,有问题欢迎交流。
K230开发板实战:5步搞定YOLOv8模型部署(附常见报错解决方案)
本文提供了一份详细的K230开发板部署YOLOv8模型的实战教程。内容涵盖从环境准备、模型转换到代码编写的完整流程,并重点解析了使用AICube工具链时常见的“生成部署文件异常”等报错解决方案,旨在帮助开发者高效完成嵌入式AI模型部署。
Cookie中保存中文出错HTTP Status 500-
在Cookie中保存中文时出现如下500系统内部错误: 出错原因:在保存Cookie字符串出现中文时没有进行字符转码的编码,抛出异常。 解决cookie无法保存中文问题: 使用JAVA中java.net包中URL字符串编码与解码的工具类 步骤:1.在.jsp页面的page中导入 Java.net.*的包 contentType="text/html;charset=utf-8
手把手教你用FreeModbus RTU协议栈实现STM32与PLC通信(附Keil工程)
本文详细介绍了如何使用FreeModbus RTU协议栈在STM32上实现与PLC的工业通信。从环境搭建、工程配置到关键移植接口实现,提供了Keil工程模板和调试技巧,帮助开发者快速掌握Modbus RTU通信技术,适用于工业自动化领域的设备间通信需求。
LTE 中设置voice/data centric的差异
1. 什么是voice centric和data centric Voice centric和data centric的差别在于以语音为中心还是以数据为中心。这里的以某某为中心可不是说说而已。举个栗子,UE一般搜网注册都会按照LUG(LTE->UMTS->GSM)或者LC(LTE->CDMA)的顺序进行,如果UE(未开通VOLTE)注册到LTE时,网络提示不支持语音,比如CSFB。UE就必须disable LTE后回到GU或者CDMA,否则留在不能语音的网络下,UE就会...
HTTP 协议之 Chunked 解析
我之前没有想到用到长度这个数据, 而是看到了 “\r\n 数据块、r\n”, 于是我就想到通过查找"\r\n"来提取数据, 如果你认真的看了上面过程中我的解析, 你就知道原因了。最最开始的地方: 你需要先确认你收到的数据时使用的 chunked 编码, 也就是找到 Transfer-Encoding: chunked, 如果你找到了, 好的, 那接下来就可以按照下面的步骤开始进行解析了。, 都是一个 Chunked, 所以不要使用的太频繁哦, 否则 Chunk 数量太多, 额外的数据太浪费空间了。
手把手教你用vivado2018.3为复旦微JFMQL15T打IP补丁(含环境变量配置技巧)
本文详细介绍了在Vivado 2018.3环境中为复旦微JFMQL15T开发板打IP补丁的全流程,包括环境变量配置、IP缓存管理等关键步骤。通过实战验证的解决方案,帮助工程师快速搭建开发环境,解决国产芯片开发中的常见问题,提升开发效率。
[转] HTTP协议之Chunked解析
[转] HTTP协议之Chunked解析 [转] HTTP协议之Chunked解析 | Computer, Electron and TechnologyAdd[转] HTTP协议之Chunked解析Posted: September 2, 2008 at 9:59...
ExpressLRS(ELRS)接收机技术全景:从历史演进、技术底层到产业生态全解析——上
ExpressLRS(ELRS)是一种由全球开源社区驱动的双向射频遥控链路协议栈,其接收机作为核心终端,承担信号接收解调、遥控指令解析、飞控数据交互与遥测回传等关键功能。自2018年问世以来,ELRS凭借极致性能、低成本、开放生态和强兼容性,从航模DIY方案发展为消费级无人机领域的事实标准,并逐步渗透工业级场景。 ELRS接收机采用模块化分层架构,支持2.4GHz和900MHz双频段,通过LoRa、FLRC、FSK多调制模式实现低延迟与远距离平衡。其核心技术包括自适应跳频抗干扰、TDD双向链路和极简数据包。
从矩阵理论角度理解偏最小二乘回归,以及在脑科学中(脑影像与行为、基因表达的关系)的应用举例
偏最小二乘法 (PLS) 是一种多元数据驱动的统计技术,旨在提取表示最大大脑行为关联的潜在变量(或潜在成分 latent components [LC])。
HTTP协议中的chunked编码解析
“HTTP协议中的chunked传输编码全接触。” 在HTTP协议中,服务器发往客户端的数据中,通常都包括HTTP头和HTTP体,当存在HTTP体的时候,HTTP体的长度通常是由HTTP头内的“Content-Length”字段确定。 就像下图: 不过,“Content-Length”字段并非总是存在,这就涉及到今天要讲的chunked编码,它在HTTP协议标准的早期并不存在,而是在HTTP...
NSIS教程(8): 基于第三方界面库的安装包界面
前面的几篇文章介绍了NSIS的传统界面的安装包和现代界面的安装包的制作方法,也提到了NSIS支持自定义页面(即使用page custom)的特性,自定义页面需要用户自己创建对话框、控件、添加控件响应等等,虽然NSIS提供了nsDialogs.nsh来支持这些功能,但使用起来还是不太方便(需要专门了解这个插件诸多用法),而且不够灵活,所以本文介绍一种终极的自定义界面的安装包解决方案,即完全使用第三方
HTTP协议之Chunked解析_zkheartboy's Linux life_百度空间
HTTP协议之Chunked解析_zkheartboy's Linux life_百度空间 HTTP协议之Chunked解析_zkheartboy's Linux life_百度空间HTTP协议之Chunked解析2007-11-30 15:42在网上找了好一会,始...
关于 SAP UI5 应用 url 中的特殊符号 # 的作用介绍
符号在 SAP UI5 的 URL 中不仅仅是一个分隔符,更是动态路由、状态管理和深链接的关键所在。通过合理使用,开发者可以实现高效、流畅的用户体验,同时保持系统的可维护性和扩展性。通过 SAP UI5 提供的灵活路由机制,企业应用可以轻松实现复杂导航需求,同时为用户提供直观的交互体验。
锂电池充电器电路设计 里面有电路
锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。
java chunked编码解码_HTTP协议中的CHUNKED编码解析
HTTP协议中的TRANFER-ENCODING:CHUNKED编码解析通常情况下,Transfer-Encoding域的值应当为chunked,表明采用chunked编码方式来进行报文体的传输。chunked编码是HTTP/1.1 RFC里定义的一种编码方式,因此所有的HTTP/1.1应用都应当支持此方式。chunked编码的基本方法是将大块数据分解成多块小数据,每块都可以自指定长度,其具体格式...
VC中sqlite的使用
在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示
Chunked coding converter核心原理深度解析:HTTP协议层面的WAF绕过
在Web安全测试领域,面对日益复杂的WAF(Web应用防火墙)防护,分块传输技术已成为渗透测试工程师的重要绕过手段。Chunked coding converter作为Burp Suite的专业分块传输辅助插件,通过在HTTP协议层面拆分请求包体并控制发送节奏,帮助安全测试人员突破WAF的检测机制。本文将从核心原理、实现机制到实际应用,全面解析这款工具如何在HTTP协议层面实现WAF绕过。 ##
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
3699



被折叠的 条评论
为什么被折叠?



