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

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

Info

Publication number
CN103929445B
CN103929445B CN201310011423.9A CN201310011423A CN103929445B CN 103929445 B CN103929445 B CN 103929445B CN 201310011423 A CN201310011423 A CN 201310011423A CN 103929445 B CN103929445 B CN 103929445B
Authority
CN
China
Prior art keywords
chunk
read
data
value
size
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.)
Active
Application number
CN201310011423.9A
Other languages
English (en)
Other versions
CN103929445A (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
Beijing Zhongke Huaying Media Technology Co ltd
Institute of Acoustics CAS
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 Beijing Zhongke Huaying Media Technology Co ltd, Institute of Acoustics CAS filed Critical Beijing Zhongke Huaying Media Technology Co ltd
Priority to CN201310011423.9A priority Critical patent/CN103929445B/zh
Publication of CN103929445A publication Critical patent/CN103929445A/zh
Application granted granted Critical
Publication of CN103929445B publication Critical patent/CN103929445B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明涉及一种在线解析HTTP chunked编码数据的方法,包括:针对所接收的某一HTTP报文,设定一个数值,使用PEEK操作读取该数值长度的字节数据;使用READ操作读取所述HTTP报文头部和第一个chunk的chunk‑size字段,并丢弃;确定第一个chunk的chunk‑size字段表示的值,根据该值使用READ操作读取第一个chunk中的chunk‑data的数据;使用PEEK操作读取5个字节,如果该5字节是一个chunk‑size字段且表示的值为0,解析结束;否则,使用PEEK操作读取长度足以超过chunk‑size字段长度的字节数;分析chunk‑size字段的实际长度及其表示的值,如果chunk‑size字段表示的值为零,解析结束;否则,使用READ操作读取等于chunk‑size字段长度的字节数,然后使用READ操作读取等于chunk‑size表示的值的字节数。

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编码规则提取有效数据,将解析出的数据拷贝到有效内容缓冲区。HTTPchunked编码离线解析法导致解码过程中会产生两次内存拷贝,造成内存占用多、处理延迟高的问题。且离线解析法适合于原型系统开发,并不适合产品开发环境。
发明内容
本发明的目的在于克服现有的HTTP chunked编码离线解析法内存占用多、处理延迟高的问题,从而提供一种延迟小、内存占用少的在线解析HTTP chunked编码数据的方法。
为了实现上述目的,本发明提供了一种在线解析HTTP chunked编码数据的方法,包括:
步骤1)、针对所接收的某一HTTP报文,设定一个数值,使得该数值的大小不小于该HTTP报文头部和第一个chunk的chunk-size字段的长度之和,然后从所述HTTP报文的起始位置起,使用PEEK操作读取该数值长度的字节数据;
步骤2)、分析步骤1)所读取的数据,确定HTTP报文头部和第一个chunk的chunk-size字段的长度之和,根据该长度值使用READ操作读取所述HTTP报文头部和第一个chunk的chunk-size字段,并丢弃;
步骤3)、根据步骤1)所读取的数据确定第一个chunk的chunk-size字段表示的值,根据该值使用READ操作读取第一个chunk中的chunk-data的数据;
步骤4)、使用PEEK操作读取5个字节,如果该5字节恰好是一个chunk-size字段且表示的值为0,则解析结束;否则,继续执行下面的步骤;
步骤5)、使用PEEK操作读取长度足以超过chunk-size字段长度的字节数;
步骤6)、分析步骤5)所读取的chunk-size字段的实际长度及其表示的值,如果chunk-size字段表示的值为零,则解析结束;否则,使用READ操作读取等于chunk-size字段长度的字节数,然后执行下一步;
步骤7)、使用READ操作读取等于chunk-size表示的值的字节数,然后重新执行步骤5);
其中,所述PEEK操作用于从协议栈缓冲区中获取数据但不将该数据从协议栈缓冲区中删除,使其能够被后续的READ操作或PEEK操作获取;所述READ操作用于从协议栈缓冲区中获取数据并将该数据从协议栈缓冲区中删除,使其不能被后续的READ或PEEK操作获取。
上述技术方案中,所述chunk-size字段为RFC2612所述chunk-size字段,连同该字段前面与后面的回车换行符。
本发明的优点在于
1、本发明不需要一个完整的应用层缓冲区存放HTTP报文,有利于降低内存占用。
2、本发明减少了一次内存拷贝,减小处理延迟。
附图说明
图1为本发明提出的一种在线解析HTTP chunked编码数据的方法的流程图;
图2为要实现本发明方法所需外部环境的示意图;
图3—图8为在一个实施例中所实现的本发明的在线解析HTTP chunked编码的方法的工作过程示意图。
具体实施方式
现结合附图对本发明作进一步的描述。
在对本发明做详细说明前,首先对本发明中所涉及的相关概念做统一说明。
chunk-size字段:与RFC2616中所描述的chunk-size字段相同,还包括该字段之前与之后的回车换行符(即CRLF)。
PEEK操作:通过操作系统提供的Socket API或网络编程框架,从协议栈缓冲区中获取一定的数据但不从协议栈缓冲区中删除,使其会被后续的READ或PEEK操作获取。
READ操作:通过操作系统提供的Socket API或网络编程框架,从协议栈缓冲区中获取一定的数据并从协议栈缓冲区中删除,使其不会被后续的READ或PEEK操作获取。
下面对实现本发明方法所需要的外部环境做一简要介绍。
要实现本发明方法,参考图2,应当具有协议栈软件模块、协议栈缓冲区、有效数据存放模块、临时缓存模块。
协议栈软件模块,用于接收网络数据,并维护一定量的协议栈缓冲区,将已经从网络接收到但尚未被其他模块读取的网络数据缓存于该协议栈缓冲区,以及提供接口供其他模块顺序读取该内存缓冲区内的数据。其他模块会请求从协议栈缓冲区读取若干字节,但实际得到的字节数可能会小于请求的字节数。
协议栈缓冲区,用于存放尚未被应用层READ操作读取的数据。一般认为所有数据在解析开始时均已存放在了协议栈缓冲区中。
有效数据存放模块,用于维护一定量的缓冲区(即有效数据存放区),该有效数据存放区用于存放chunked编码的数据经解析后的HTTP报文有效内容。
临时缓存模块,用于维护一定量的临时缓冲区,该临时缓冲区存放PEEK操作读取的内容和部分READ操作读取的内容。
本发明的方法能够实现对HTTP chunked编码数据的在线解析。如图1所示,该方法包括以下步骤:
步骤1)、针对所接收的某一HTTP报文,设定一个数值,使得该数值的大小不小于该HTTP报文头部和第一个chunk的chunk-size字段的长度之和,然后从所述HTTP报文的起始位置起,使用PEEK操作读取该数值长度的字节数据;
步骤2)、分析步骤1)所读取的数据,确定HTTP报文头部和第一个chunk的chunk-size字段的长度之和,根据该长度值使用READ操作读取所述HTTP报文头部和第一个chunk的chunk-size字段,并丢弃;
经过本步骤后,第一个chunk中的chunk-data之前的数据被读取并移走。
步骤3)、根据步骤1)所读取的数据确定第一个chunk的chunk-size字段表示的值,根据该值使用READ操作读取第一个chunk中的chunk-data的数据,所得到的数据为有效数据,进行提取。
经过该步骤后,第一个chunk中的chunk-data的数据被读取并移走。
步骤4)、使用PEEK操作读取5个字节,如果该5字节恰好是一个chunk-size字段且表示的值为0(即符合“\r\n0\r\n”的模式串),则解析结束;否则,继续执行下面的步骤;
步骤5)、使用PEEK操作读取长度足以超过chunk-size字段长度的字节数,如16字节。
步骤6)、分析chunk-size字段的实际长度及其表示的值。如果chunk-size字段表示的值为零,则解析结束;否则,使用READ操作读取等于chunk-size字段长度的字节数,然后执行下一步。
步骤7)、使用READ操作读取等于chunk-size表示的值的字节数,这一数据为有效报文数据,然后重新执行步骤5)。
以上是对本发明方法的基本步骤的描述。需要说明的是,在开始解析时,网络报文可能没有被完全传送到网络协议栈,以至于读取操作返回的字节数可能少于所要求读取的字节数。如果发生这种情况,应做如下处理:
(a)对于PEEK操作,当实际读到的字节数M少于所要求读取的字节数N时,重新执行PEEK操作,要求读取N字节,直至读取到的字节数等于N;
(b)对于READ操作,当实际读到的字节数M少于所要求读取的字节数N时,取N等于N-M,重新执行READ操作,要求读取N字节,直至读取到的字节数等于所要求读取的字节数。
为了便于理解,下面结合一个具体的实施例,参考图3-图7,对本发明方法的应用做详细说明、
(1)假设输入的HTTP报文头部长度为190字节,用H*190表示,chunked编码报文(不包含HTTP报头)用C语言风格的字串可表示为“\r\n10\r\n0123456789abcdef\r\n0\r\n”,报文只有1个长度非零的chunk,该chunk包含16字节有效数据。如图3所示,该报文被协议栈接收。
(2)如图4所示,找到一个大于HTTP报文头部与第一个chunk的chunk-size字段的长度的和的数值199,使用PEEK操作读取199字节,将读取的数据存放在临时缓存模块。
(3)确定HTTP报文头部的实际长度为190,如图5所示,使用READ操作读取190字节,存放于临时缓存区并丢弃。
(4)确定chunk-size字段占用6字节,其表示的数值为是十进制16。如图6所示,使用READ操作读取6字节,存放于临时缓存区并丢弃。
(5)如图7所示,使用READ操作读取16字节,存放于有效数据存放区;
(6)如图8所示,使用PEEK操作读取5字节,存放在临时缓存模块;
(7)确定chunk-size字段占用5字节,其表示的数值为是0。解析结束。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。

Claims (2)

1.一种在线解析HTTP chunked编码数据的方法,包括:
步骤1)、针对所接收的某一HTTP报文,设定一个数值,使得该数值的大小不小于该HTTP报文头部和第一个chunk的chunk-size字段的长度之和,然后从所述HTTP报文的起始位置起,使用PEEK操作读取该数值长度的字节数据;
步骤2)、分析步骤1)所读取的数据,确定HTTP报文头部和第一个chunk的chunk-size字段的长度之和,根据该长度值使用READ操作读取所述HTTP报文头部和第一个chunk的chunk-size字段,并丢弃;
步骤3)、根据步骤1)所读取的数据确定第一个chunk的chunk-size字段表示的值,根据该值使用READ操作读取第一个chunk中的chunk-data的数据;
步骤4)、使用PEEK操作读取5个字节,如果该5字节恰好是一个chunk-size字段且表示的值为0,则解析结束;否则,继续执行下面的步骤;
步骤5)、使用PEEK操作读取长度足以超过chunk-size字段长度的字节数;
步骤6)、分析步骤5)所读取的chunk-size字段的实际长度及其表示的值,如果chunk-size字段表示的值为零,则解析结束;否则,使用READ操作读取等于chunk-size字段长度的字节数,然后执行下一步;
步骤7)、使用READ操作读取等于chunk-size表示的值的字节数,然后重新执行步骤5);
其中,所述PEEK操作用于从协议栈缓冲区中获取数据但不将该数据从协议栈缓冲区中删除,使其能够被后续的READ操作或PEEK操作获取;所述READ操作用于从协议栈缓冲区中获取数据并将该数据从协议栈缓冲区中删除,使其不能被后续的READ或PEEK操作获取。
2.根据权利要求1所述的在线解析HTTP chunked编码数据的方法,其特征在于,所述chunk-size字段包括:RFC2612所述chunk-size字段以及该字段前面与后面的回车换行符。
CN201310011423.9A 2013-01-11 2013-01-11 一种在线解析HTTP chunked编码数据的方法 Active CN103929445B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310011423.9A CN103929445B (zh) 2013-01-11 2013-01-11 一种在线解析HTTP chunked编码数据的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310011423.9A CN103929445B (zh) 2013-01-11 2013-01-11 一种在线解析HTTP chunked编码数据的方法

Publications (2)

Publication Number Publication Date
CN103929445A CN103929445A (zh) 2014-07-16
CN103929445B true CN103929445B (zh) 2017-06-13

Family

ID=51147522

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310011423.9A Active CN103929445B (zh) 2013-01-11 2013-01-11 一种在线解析HTTP chunked编码数据的方法

Country Status (1)

Country Link
CN (1) CN103929445B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1585379A (zh) * 2004-05-25 2005-02-23 华中科技大学 一种数据包的快速解析方法
CN1997030A (zh) * 2006-12-13 2007-07-11 武汉虹旭信息技术有限责任公司 用于http数据还原的方法
CN101557411A (zh) * 2008-04-09 2009-10-14 北京闻言科技有限公司 一种在http通信中统一处理请求应答的方法
US7734824B2 (en) * 2002-10-18 2010-06-08 Ricoh Co., Ltd. Transport of reversible and unreversible embedded wavelets
CN102307151A (zh) * 2011-10-10 2012-01-04 上海西默通信技术有限公司 基于http的网络数据包还原方法
US8243307B2 (en) * 2007-03-12 2012-08-14 Konica Minolta Business Technolgies, Inc. HTTP server and program for transmitting reports with chunked data
CN102694864A (zh) * 2012-05-30 2012-09-26 安科智慧城市技术(中国)有限公司 利用http协议实现流媒体功能的方法、流媒体服务器及系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101151935B1 (ko) * 2007-01-10 2012-07-11 노키아 코포레이션 Mbms 핸드오버 실행 방법, mbms 핸드오버 실행 장치, 컴퓨터 판독가능 저장 매체 및 mbms 핸드오버 실행 시스템

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7734824B2 (en) * 2002-10-18 2010-06-08 Ricoh Co., Ltd. Transport of reversible and unreversible embedded wavelets
CN1585379A (zh) * 2004-05-25 2005-02-23 华中科技大学 一种数据包的快速解析方法
CN1997030A (zh) * 2006-12-13 2007-07-11 武汉虹旭信息技术有限责任公司 用于http数据还原的方法
US8243307B2 (en) * 2007-03-12 2012-08-14 Konica Minolta Business Technolgies, Inc. HTTP server and program for transmitting reports with chunked data
CN101557411A (zh) * 2008-04-09 2009-10-14 北京闻言科技有限公司 一种在http通信中统一处理请求应答的方法
CN102307151A (zh) * 2011-10-10 2012-01-04 上海西默通信技术有限公司 基于http的网络数据包还原方法
CN102694864A (zh) * 2012-05-30 2012-09-26 安科智慧城市技术(中国)有限公司 利用http协议实现流媒体功能的方法、流媒体服务器及系统

Also Published As

Publication number Publication date
CN103929445A (zh) 2014-07-16

Similar Documents

Publication Publication Date Title
CN102571966B (zh) 一种大型xml文件的网络传输方法
US9363309B2 (en) Systems and methods for compressing packet data by predicting subsequent data
KR100424130B1 (ko) 데이터 압축 장치, 데이터베이스 시스템, 데이터 통신시스템, 데이터 압축 방법, 기억 매체 및 프로그램 전송장치
CN104221315B (zh) 通用对象传递及基于模板的文件传递的方法及服务器
CN109818930B (zh) 一种基于tcp协议的通讯文本数据传输方法
US8718098B2 (en) Method for compressing and decompressing time stamp and equipment thereof
US20170155402A1 (en) Encoder, decoder and method
CN103281213A (zh) 一种网络流量内容提取和分析检索方法
CN101356816B (zh) 用于将无线网络中的系统信息消息分段的方法和装置
WO2022048511A1 (zh) 智能燃气表差分固件升级方法
KR101568947B1 (ko) 폰트 파일을 다운로드하는 방법 및 시스템
CN103152606B (zh) 视频文件处理方法及装置、系统
CN102185611A (zh) 数据的有效提取和压缩
CN104767710B (zh) 基于dfa的http分块传输编码的传输载荷提取方法
CN103929447B (zh) 一种基于PEEK操作的解析HTTP chunked编码数据的方法
CN105337617A (zh) 一种fsn文件高效压缩方法
CN110278054A (zh) 一种配网方法和装置
CN103138871A (zh) 移动通讯系统中应用程序的服务器数据处理系统和方法
CN103929445B (zh) 一种在线解析HTTP chunked编码数据的方法
CN103929404B (zh) 一种解析HTTP chunked编码数据的方法
CN108040041A (zh) 一种基于业务驱动的图像差异传输协议设计系统及方法
CN112188211A (zh) 一种转码实现方法和装置
CN104734722A (zh) 数据压缩方法及数据解压缩装置
CN104021121A (zh) 一种文本数据压缩方法、装置及服务器
US20120151330A1 (en) Method and apparatus for encoding and decoding xml documents using path code

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

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

Patentee after: INSTITUTE OF ACOUSTICS, CHINESE ACADEMY OF SCIENCES

Patentee after: Zhongke Huaying (Beijing) digital cinema line Co.,Ltd.

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

Patentee before: INSTITUTE OF ACOUSTICS, CHINESE ACADEMY OF SCIENCES

Patentee before: BEIJING ZHONGKE HUAYING MEDIA TECHNOLOGY Co.,Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20210809

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: 20210809

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: Zhongke Huaying (Beijing) digital cinema line Co.,Ltd.