CN103929404A - 一种解析HTTP chunked编码数据的方法 - Google Patents

一种解析HTTP chunked编码数据的方法 Download PDF

Info

Publication number
CN103929404A
CN103929404A CN201310011892.0A CN201310011892A CN103929404A CN 103929404 A CN103929404 A CN 103929404A CN 201310011892 A CN201310011892 A CN 201310011892A CN 103929404 A CN103929404 A CN 103929404A
Authority
CN
China
Prior art keywords
chunk
read
current
size
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201310011892.0A
Other languages
English (en)
Other versions
CN103929404B (zh
Inventor
陈君
李明哲
李军
陈晓
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhengzhou Xinrand Network Technology Co ltd
Institute of Acoustics CAS
Original Assignee
Institute of Acoustics CAS
Beijing Intellix Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Institute of Acoustics CAS, Beijing Intellix Technologies Co Ltd filed Critical Institute of Acoustics CAS
Priority to CN201310011892.0A priority Critical patent/CN103929404B/zh
Publication of CN103929404A publication Critical patent/CN103929404A/zh
Application granted granted Critical
Publication of CN103929404B publication Critical patent/CN103929404B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)
  • Communication Control (AREA)

Abstract

本发明涉及一种解析HTTP chunked编码数据的方法,包括:定位到所接收的HTTP报文中任一chunk的起始位置;根据当前的解析状态对chunk中的chunk-size字段的长度进行预测;根据前一步骤所得到的预测长度读取相应长度的chunk-size数据并缓存,对当前缓存的全部chunk-size数据加以分析,根据分析结果判断是否已经完成对整个chunk-size字段的读取,若已完成,执行下一步,否则,基于当前缓存的全部chunk-size数据分析解析状态,并重新执行长度预测步骤;根据整个chunk-size字段值,读取chunk-data中的数据。

Description

一种解析HTTP chunked编码数据的方法
技术领域
本发明涉及网络通信领域,特别涉及一种解析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。
上述技术方案中,在所述的步骤3)中,若当前缓存的全部chunk-size数据中已经包含字段末尾的LF,则已经完成对整个chunk-size字段的读取。
上述技术方案中,在所述的步骤3)中,基于当前缓存的全部chunk-size数据分析解析状态包括:
若当前缓存的全部chunk-size数据满足“”,则当前解析状态为“空串”;
若当前缓存的全部chunk-size数据满足“\r”,则当前解析状态为“已读取1字节”;
若当前缓存的全部chunk-size数据满足“\r\n”,则当前解析状态为“已读取2字节”;
若当前缓存的全部chunk-size数据满足“\r\n”[h]*,则当前解析状态为“已读取3字节且未遭遇字段末尾的CR”;
若当前缓存的全部chunk-size数据满足“\r\n”[h]*“\r”,则当前解析状态为“读到了字段末尾的CR”;
若当前缓存的全部chunk-size数据满足“\r\n”[h]*“\r\n”,则当前解析状态为“读到了字段末尾的LF”。
本发明的优点在于:
1、本发明不需要一个完整的应用层缓冲区存放HTTP报文,降低内存占用。
2、本发明减少一次内存拷贝,减小了处理延迟。
附图说明
图1是本发明的解析HTTP chunked编码数据的方法的流程图;
图2是本发明的解析HTTP chunked编码数据的系统框图;
图3-图7是在一个实施例中解析HTTP chunked编码的工作过程示意图。
具体实施方式
在对本发明做详细说明之前,对本发明中所涉及的相关概念做统一描述。
chunk-size字段:与RFC2616中所描述的chunk-size字段相同,还包括该字段之前与之后的回车换行符(即CRLF)。
chunk-data字段:与RFC2616中所描述的chunk-data字段相同。
现结合附图对本发明作进一步的描述。
本发明的方法能够实现对HTTP chunked编码数据的快速解析,参考图1,本发明的方法包括以下步骤:
步骤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中的chunk-size字段的长度进行预测时,需要获取当前解析状态下chunk-size字段尚未被读取的字节数可能的最小值,这一最小值就是预测的长度值。
chunk-size字段在读取过程中共涉及6个解析状态,这6个解析状态与chunk-size字段中尚未被读取的字节数可能的最小值之间的对应关系如下:
表1
上述表格中,[h]*表示0到多个十六进制数字。
在所述的步骤3)中,当读取到字段末尾的LF后,意味着整个chunk-size字段读取完毕。
在所述的步骤3)中,将当前缓存的全部chunk-size数据与之前提到的表1中状态表示式进行比较,根据比较结果确定解析状态。
本发明还提供了一种与上述方法相对应的系统,如图2所示,该系统包括:数据接收模块、有效数据缓存模块、字段缓存模块以及字段长度预测模块。其中,
所述的数据接收模块用于接收网络数据,维护一定量的缓冲区,将已经从网络接收到但尚未被其他模块读取的网络数据缓存于该缓冲区,提供接口供其他模块顺序读取该缓冲区内的数据。其他模块会请求读取若干字节,但实际得到的字节数可能会小于请求的字节数;
所述的有效数据缓存模块用于维护一定量的缓冲区,存放chunked编码的数据经解析后的HTTP报文有效内容;
所述的字段缓存模块用于维护一定量的缓冲区,存放正在被解析的chunk的chunk-size字段已经被读取的部分;
所述的字段长度预测模块用于计算当前chunk的chunk-size字段尚未被读取的字节数可能的最小值。
下面对该系统中的各个模块做进一步的说明。
所述数据接收模块、有效数据缓存模块、字段缓存模块中的缓冲区包括DRAM内存、SRAM内存、Flash EEPROM Memory、本地固态硬盘或机械硬盘提供的存储单元。
所述字段长度预测模块,根据已经读取到的chunk-size字段的内容,归纳解析活动的解析状态,基于这个解析状态推断chunk-size字段尚未被读取的字节数可能的最小值。
为了便于理解,下面参考图3-图7,结合一个具体的实例,对本发明的方法与系统做详细的说明。
(1)如图3所示,假设输入的chunked编码报文(不包含HTTP报头)用C语言风格的字串可表示为“\r\n10\r\n0123456789abcdef\r\n0\r\n”,报文只有1个长度非零的chunk,该chunk包含16字节有效数据。该报文被数据接收模块接收。开始解析第一个chunk。初始状态表示为“”,查阅表1,chunk-size字段剩余字节最小值查表为5。从数据接收模块读取5字节,读到字段缓存模块。相应的结果如图4所示。
(2)此时,读到的数据为“\n10\r”,匹配表1中的状态表示“\r\n”[h]*“\r”。查表知chunk-size字段剩余字节最小值查表为1。从数据接收模块读取1字节,读到字段缓存模块。相应的结果如图5所示。
(3)此时,读到的数据为“\r\n10\r\n”,匹配表1中的状态表示“\r\n”[h]*“\r\n”。查表知chunk-size字段剩余字节最小值查表为0。chunk-size字段读取完成。分析chunk-size字段,发现chunk-data长度为16。从数据接收模块读取16字节,读到有效数据缓存模块。相应的结果如图6所示。进入下一个chunk。
(4)此时,读到的数据为空串,匹配表1中的状态表示“”。查表知chunk-size字段剩余字节最小值查表为5。从数据接收模块读取5字节,读到字段缓存模块。相应的结果如图7所示。
(5)此时,读到的数据为“\r\n0\r\n”,匹配表1中的状态表示“\r\n”[h]*“\r\n”。查表知chunk-size字段剩余字节最小值查表为0。chunk-size字段读取完成。分析chunk-size字段,发现chunk-data长度为0。报文解析结束。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。

Claims (4)

1.一种解析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.根据权利要求1所述的解析HTTP chunked编码数据的方法,其特征在于,在所述的步骤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。
3.根据权利要求1所述的解析HTTP chunked编码数据的方法,其特征在于,在所述的步骤3)中,若当前缓存的全部chunk-size数据中已经包含字段末尾的LF,则已经完成对整个chunk-size字段的读取。
4.根据权利要求1所述的解析HTTP chunked编码数据的方法,其特征在于,在所述的步骤3)中,基于当前缓存的全部chunk-size数据分析解析状态包括:
若当前缓存的全部chunk-size数据满足“”,则当前解析状态为“空串”;
若当前缓存的全部chunk-size数据满足“\r”,则当前解析状态为“已读取1字节”;
若当前缓存的全部chunk-size数据满足“\r\n”,则当前解析状态为“已读取2字节”;
若当前缓存的全部chunk-size数据满足“\r\n”[h]*,则当前解析状态为“已读取3字节且未遭遇字段末尾的CR”;
若当前缓存的全部chunk-size数据满足“\r\n”[h]*“\r”,则当前解析状态为“读到了字段末尾的CR”;
若当前缓存的全部chunk-size数据满足“\r\n”[h]*“\r\n”,则当前解析状态为“读到了字段末尾的LF”。
CN201310011892.0A 2013-01-11 2013-01-11 一种解析HTTP chunked编码数据的方法 Active CN103929404B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310011892.0A CN103929404B (zh) 2013-01-11 2013-01-11 一种解析HTTP chunked编码数据的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310011892.0A CN103929404B (zh) 2013-01-11 2013-01-11 一种解析HTTP chunked编码数据的方法

Publications (2)

Publication Number Publication Date
CN103929404A true CN103929404A (zh) 2014-07-16
CN103929404B CN103929404B (zh) 2017-02-15

Family

ID=51147483

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310011892.0A Active CN103929404B (zh) 2013-01-11 2013-01-11 一种解析HTTP chunked编码数据的方法

Country Status (1)

Country Link
CN (1) CN103929404B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10142397B2 (en) 2016-04-05 2018-11-27 International Business Machines Corporation Network file transfer including file obfuscation
CN115412532A (zh) * 2022-08-15 2022-11-29 深圳市风云实业有限公司 一种sip及扩展协议会话控制流识别及处理的方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1997030A (zh) * 2006-12-13 2007-07-11 武汉虹旭信息技术有限责任公司 用于http数据还原的方法
CN101291324A (zh) * 2007-04-16 2008-10-22 三星电子株式会社 使用超文本传输协议的通信方法和设备
CN101557411A (zh) * 2008-04-09 2009-10-14 北京闻言科技有限公司 一种在http通信中统一处理请求应答的方法
US20110099594A1 (en) * 2009-10-28 2011-04-28 Qualcomm Incorporated Streaming encoded video data
WO2011139305A1 (en) * 2010-05-04 2011-11-10 Azuki Systems, Inc. Method and apparatus for carrier controlled dynamic rate adaptation and client playout rate reduction
CN102694864A (zh) * 2012-05-30 2012-09-26 安科智慧城市技术(中国)有限公司 利用http协议实现流媒体功能的方法、流媒体服务器及系统

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1997030A (zh) * 2006-12-13 2007-07-11 武汉虹旭信息技术有限责任公司 用于http数据还原的方法
CN101291324A (zh) * 2007-04-16 2008-10-22 三星电子株式会社 使用超文本传输协议的通信方法和设备
CN101557411A (zh) * 2008-04-09 2009-10-14 北京闻言科技有限公司 一种在http通信中统一处理请求应答的方法
US20110099594A1 (en) * 2009-10-28 2011-04-28 Qualcomm Incorporated Streaming encoded video data
WO2011139305A1 (en) * 2010-05-04 2011-11-10 Azuki Systems, Inc. Method and apparatus for carrier controlled dynamic rate adaptation and client playout rate reduction
CN102694864A (zh) * 2012-05-30 2012-09-26 安科智慧城市技术(中国)有限公司 利用http协议实现流媒体功能的方法、流媒体服务器及系统

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10142397B2 (en) 2016-04-05 2018-11-27 International Business Machines Corporation Network file transfer including file obfuscation
US10826969B2 (en) 2016-04-05 2020-11-03 International Business Machines Corporation Network file transfer including file obfuscation
CN115412532A (zh) * 2022-08-15 2022-11-29 深圳市风云实业有限公司 一种sip及扩展协议会话控制流识别及处理的方法
CN115412532B (zh) * 2022-08-15 2023-07-21 深圳市风云实业有限公司 一种sip及扩展协议会话控制流识别及处理的方法

Also Published As

Publication number Publication date
CN103929404B (zh) 2017-02-15

Similar Documents

Publication Publication Date Title
US9363309B2 (en) Systems and methods for compressing packet data by predicting subsequent data
US9735805B2 (en) Encoder, decoder and method
US9571543B2 (en) Using quality information for adaptive streaming of media content
US8560552B2 (en) Method for lossless data reduction of redundant patterns
Zhong et al. Timeliness in lossless block coding
CN102783147A (zh) 预算编码
TW201731224A (zh) 熵編碼及解碼方案
CN102450014A (zh) 用于质量感知视频优化的框架
CN112866730B (zh) 流媒体数据传输方法及装置、系统、电子设备、存储介质
CN111967244A (zh) 一种基于fpga的fast协议解码方法、装置及设备
KR20120048525A (ko) Sms를 통해 원격 디바이스를 제어하는 방법 및 이를 위한 장치
US11315605B2 (en) Method, device, and computer program product for storing and providing video
CN102438004A (zh) 获取媒体文件的元数据信息的方法、系统及多媒体播放器
CN103152606B (zh) 视频文件处理方法及装置、系统
US20140013007A1 (en) Access log management method
CN112188211A (zh) 一种转码实现方法和装置
CN103929404A (zh) 一种解析HTTP chunked编码数据的方法
CN105337617A (zh) 一种fsn文件高效压缩方法
US20190089785A1 (en) Identification encoding device and identification decoding device for data distribution and networks, and network elements comprising such devices
CN110049133B (zh) 一种dns区文件全量下发的方法和装置
CN103929447A (zh) 一种解析HTTP chunked编码数据的方法
CN104767710A (zh) 基于dfa的http分块传输编码的传输载荷提取方法
CN107615810A (zh) 用于在线网络代码的包头压缩系统和方法
CN101296166B (zh) 基于索引的多媒体数据的测量方法
US8458326B2 (en) Sampling from distributed streams of data

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20210818

Address after: Room 1601, 16th floor, East Tower, Ximei building, No. 6, Changchun Road, high tech Industrial Development Zone, Zhengzhou, Henan 450001

Patentee after: Zhengzhou xinrand Network Technology Co.,Ltd.

Address before: 100190, No. 21 West Fourth Ring Road, Beijing, Haidian District

Patentee before: INSTITUTE OF ACOUSTICS, CHINESE ACADEMY OF SCIENCES

Effective date of registration: 20210818

Address after: 100190, No. 21 West Fourth Ring Road, Beijing, Haidian District

Patentee after: INSTITUTE OF ACOUSTICS, CHINESE ACADEMY OF SCIENCES

Address before: 100190, No. 21 West Fourth Ring Road, Beijing, Haidian District

Patentee before: INSTITUTE OF ACOUSTICS, CHINESE ACADEMY OF SCIENCES

Patentee before: BEIJING INTELLIX TECHNOLOGIES Co.,Ltd.