[发明专利]一种解析HTTPchunked编码数据的方法有效
申请号: | 201310011892.0 | 申请日: | 2013-01-11 |
公开(公告)号: | CN103929404B | 公开(公告)日: | 2017-02-15 |
发明(设计)人: | 陈君;李明哲;李军;陈晓 | 申请(专利权)人: | 中国科学院声学研究所;北京中科智网科技有限公司 |
主分类号: | H04L29/06 | 分类号: | H04L29/06;H04L1/00 |
代理公司: | 北京法思腾知识产权代理有限公司11318 | 代理人: | 杨小蓉,杨青 |
地址: | 100190 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 解析 httpchunked 编码 数据 方法 | ||
技术领域
本发明涉及网络通信领域,特别涉及一种解析HTTP chunked编码数据的方法。
背景技术
HTTP协议的消息格式包含消息首部和消息体。消息首部部分定义了一些属性字段,这些字段向报文接收者提供了重要的信息。其中,Content-Length属性字段表示消息体的长度,该字段有利于数据接收过程的编程实现。然而,对于某些动态生成的数据,消息生成者可能无法立即知悉消息体的总长度,从而不能及时计算Content-Length字段值。使用chunked编码可以回避这一问题。Chunked是HTTP/1.1协议的一种传输编码方式,该传输编码方式将待传输数据切割为多个部分,报文只需提供每个部分的长度。编码后的消息体是一组连续的编码块(chunk),每个编码块包含了传输数据块(chunk-data)及其长度(chunk-size),其格式定义如下:
chunk=chunk-size[chunk-extension]CRLF chunk-data CRLF
其中,chunk-size是chunk-data的长度,为十六进制字符串。CRLF为双字节换行符,其ASCII码值为0x0d0x0a。可选的chunk-extension格式用一组“name=value”字段组成,但RFC2616未对这些字段进行定义,并规定接收者忽略不能识别的字段。
流媒体业务的分发和传输过程使用了HTTP协议,对节目内容进行chunked编码。流服务器通过TCP协议接收报文,解码后,以UDP方式推送给IPQAM,进而发送给终端用户。由于流媒体具有数据量大、传输时间长的特点,流服务器将会对大量数据进行chunked解码操作,因此,chunked解码过程的效率对于流服务器的整体性能至关重要。选择不同的chunked编码解析方式,能够给系统的开发效率、运行性能都能带来相当大的影响。
作为对chunked解析的一种最简单的实现,离线解析方法先将一个完整的HTTP报文通过网络编程技术复制到本地一个连续、单一的应用层缓冲区,再基于这个连续缓冲区根据chunked编码规则提取有效数据,将解析出的数据拷贝到有效内容缓冲区。HTTP chunked编码离线解析法导致解码过程中会产生两次内存拷贝,造成内存占用多、处理延迟高的问题。且离线解析法适合于原型系统开发,并不适合产品开发环境。
发明内容
本发明的目的在于克服现有的HTTP chunked编码离线解析法内存占用多、处理延迟高的缺陷,从而提供一种能够快速解析HTTP chunked编码的方法。
为了实现上述目的,本发明提供了一种解析HTTP chunked编码数据的方法,包括:
步骤1)、定位到所接收的HTTP报文中任一chunk的起始位置;
步骤2)、根据当前的解析状态对chunk中的chunk-size字段的长度进行预测;其中,所述解析状态指一个chunk的读取过程的完成程度;
步骤3)、根据前一步骤所得到的预测长度读取相应长度的chunk-size数据并缓存,对当前缓存的全部chunk-size数据加以分析,根据分析结果判断是否已经完成对整个chunk-size字段的读取,若已完成,执行下一步,否则,基于当前缓存的全部chunk-size数据分析解析状态,并重新执行步骤2);
步骤4)、根据整个chunk-size字段值,读取chunk-data中的数据。
上述技术方案中,在所述的步骤2)中,将当前解析状态下chunk-size字段尚未被读取的字节数可能的最小值作为预测的长度值;包括:
若当前解析状态为“空串”,则chunk-size字段尚未被读取的字节数可能的最小值为5;
若当前解析状态为“已读取1字节”,则chunk-size字段尚未被读取的字节数可能的最小值为4;
若当前解析状态为“已读取2字节”,则chunk-size字段尚未被读取的字节数可能的最小值为3;
若当前解析状态为“已读取3字节且未遭遇字段末尾的CR”,则chunk-size字段尚未被读取的字节数可能的最小值为2;
若当前解析状态为“读到了字段末尾的CR”,则chunk-size字段尚未被读取的字节数可能的最小值为1;
若当前解析状态为“读到了字段末尾的LF”,则chunk-size字段尚未被读取的字节数可能的最小值为0。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院声学研究所;北京中科智网科技有限公司,未经中国科学院声学研究所;北京中科智网科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310011892.0/2.html,转载请声明来源钻瓜专利网。
- 数据显示系统、数据中继设备、数据中继方法、数据系统、接收设备和数据读取方法
- 数据记录方法、数据记录装置、数据记录媒体、数据重播方法和数据重播装置
- 数据发送方法、数据发送系统、数据发送装置以及数据结构
- 数据显示系统、数据中继设备、数据中继方法及数据系统
- 数据嵌入装置、数据嵌入方法、数据提取装置及数据提取方法
- 数据管理装置、数据编辑装置、数据阅览装置、数据管理方法、数据编辑方法以及数据阅览方法
- 数据发送和数据接收设备、数据发送和数据接收方法
- 数据发送装置、数据接收装置、数据收发系统、数据发送方法、数据接收方法和数据收发方法
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置