HTTP报文处理方法及系统、HTTP客户端及服务器技术方案

技术编号:13797902 阅读:331 留言:0更新日期:2016-10-06 19:52
一种HTTP报文处理方法及系统、HTTP客户端及服务器;该方法包括:HTTP客户端构造包含用于标识支持服务端推模式的Expect头部字段的HTTP请求报文,并发送该HTTP请求报文;在与该HTTP请求报文相对应的长连接断开前,HTTP客户端重复执行如下处理:通过所述长连接接收HTTP响应报文;接收到包含用于标识支持服务端推模式的Expect头部字段的HTTP请求报文后,在与该HTTP请求报文相对应的长连接断开前,HTTP服务器重复执行如下处理:当前有数据需要推送时,在HTTP响应报文中标识该数据的长度,并将该数据包含在该HTTP响应报文中,通过所述长连接发送该HTTP响应报文。

【技术实现步骤摘要】

本申请涉及通信领域,尤其涉及一种HTTP(HyperText Transfer Protocol,超文本传送协议)报文处理方法及系统、HTTP客户端及服务器。
技术介绍
HTTP是基于TCP/IP(Transfer Control Protocol/Internet Protocol,传输控制协议/互联网协议)之上的一个应用层协议。该协议是一种典型的请求/响应(Request/Response)协议,其特点是无状态且需要HTTP客户端发起请求(Request),HTTP服务器才能进行响应(Response),这意味着HTTP服务器无法主动向HTTP客户端推送信息。图1是现有技术中标准的HTTP报文交互流程示意图,如图1所示,该报文交互流程包括:步骤S100:HTTP客户端(简称客户端)向HTTP服务器(简称服务器)发送第1个HTTP请求报文(简称请求报文,记作Request1)。步骤S102:接收到Request1后,服务器向客户端返回第1个HTTP响应报文(简称响应报文,记作Response1)。步骤S104:接收到Response1后,客户端向服务器发送第2个请求报文(记作Request2)。步骤S106:接收到Request2后,服务器向客户端返回第2个响应报文。之后可以重复执行上述步骤。从以上流程可知,服务器发送的响应报文与客户端发送的请求报文一一对应。即,在没有接收到客户端发送的请求报文之前,服务器无法向客户端发送响应报文,且接收到一个请求报文,服务器只能发送一个响应报文。目前有很多应用需要HTTP服务器提供服务端推送服务,例如:监控系
统、即时报价系统、游戏、协同文档、进度条等应用,都需要HTTP服务器能实时地将更新的信息推送到HTTP客户端,而无须HTTP客户端发出请求。为了满足对服务端推送服务的应用需求,现有技术中较为流行的解决方案为Comet(彗星)技术,Comet技术包括两种实现方式:长轮询(long-polling)方式和基于iframe的流方式。图2是现有技术中采用长轮询方式实现Comet技术的方法的方法流程图。长轮询(long-polling)与轮询之间的主要区别在于从HTTP服务器接收到HTTP请求报文到发送HTTP响应报文之间的时间间隔。长轮询通常将连接保持一段较长的时间,通常是数秒钟,也可能是一分钟甚至更长,当HTTP服务器上发生某个事件时,HTTP响应报文被发送,相应的连接随即被断开,长轮询立即重新开始。如图2所示,该方法包括:步骤S200:HTTP客户端(简称客户端)打开一个长连接,并向HTTP服务器(简称服务器)发送HTTP请求报文(简称请求报文)。步骤S202:接收到客户端发送的请求报文后,服务器阻塞该请求报文,直到有数据需要发送或超时(由服务器设定连接超时时间)才向客户端返回HTTP响应报文(简称响应报文),并断开对应的长连接;上述响应报文中可以包含需要发送给客户端的数据。步骤S204:接收到响应报文后,客户端中的响应处理函数会对响应报文中包含的数据进行处理,处理完成后重新打开一个长连接,并向服务器发送请求报文。步骤S206:在步骤S202之后,如果有新的数据产生,服务器保存该数据,直到再次接收到客户端发送的请求报文后,通过向客户端发送响应报文将该数据返回给客户端。图3是现有技术中采用基于iframe的流方式实现Comet技术的方法的方法流程图。基于iframe的流方式需要使用HTTP长连接,实际实现时在浏览器页面中嵌入一个iframe元素(内联框架),然后使用这个iframe请求一个特定的URL(Uniform Resource Locator,统一资源定位符),并通过这个页面的加载不断的从服务器抓回数据,从服务端抓回的数据大多是对页面当前JS(JavaScript)函数的引用和操作。Iframe中HTTP头的Transfer-Encoding(传输编码)属性为chunked(分块),这意味着服务端并不知道要发送给客户端多少数据,也就隐式意味着该连接的长度为无限。如图3所示,该方法包括:步骤S300:HTTP客户端(简称客户端)打开一个长连接,并向HTTP服务器(简称服务器)发送HTTP请求报文(简称请求报文)。步骤S302:当有数据产生时,服务器使用HTTP 1.1规范中规定的chunked(分块)编码方式回传第一部分数据;通常,一个chunked编码段放在一个TCP包中发送。步骤S304:当再有数据产生时,服务器使用chunked编码方式回传第二部分数据。服务器重复上述步骤,直至长连接超时断开,或者客户端或服务器主动断开长连接。图4是现有技术中基于HTTP 2.0的服务端推送方法的方法流程图。如图4所示,该方法包括:步骤S400:HTTP 2.0客户端(简称客户端)打开一个连接,并向HTTP2.0服务器(简称服务器)发送作为请求报文的HEADERS(报头)帧,以创建一个新的流(Stream);上述HEADERS帧中包含流的流标识符stream_id,例如:stream_id=1;以下将stream_id=1的流记作Stream1;上述HEADERS帧还包含method(方法)字段:“:method=GET”,用于标识该帧的具体请求类型。步骤S402:接收到客户端发送的HEADERS帧后,服务器在Stream1上
向客户端发送作为请求报文的PUSH_PROMISE(推送承诺)帧;上述PUSH_PROMISE帧中包含Promised-Stream-ID标记,例如:“Promised-Stream-ID=2”;该标记用于标识服务器准备使用的流的流标识符stream_id=2,以下将stream_id=2的流记作Stream2;上述PUSH_PROMISE帧还包含method(方法)字段:“:method=GET”,用于标识该帧的具体请求类型。步骤S404:服务器在Stream2上向客户端发送作为响应报文的HEADERS帧;上述HEADERS帧中包含状态(status)字段,例如:“:status=200”,用于标识响应状态;此外,HEADERS帧中还包含内容类型(content-type)字段,例如:“content-type=image/png”,用于标识后续帧中携带的数据的数据类型。此外,HEADERS帧中还包含内容长度(content-length)字段,例如:“content-length=123”,用于标识后续帧中携带的数据的长度。步骤S406:服务器在Stream2上向客户端发送DATA(数据)帧,用于向客户端传输数据,如果数据传输完毕,则用END_STREAM(流结束)标记关闭Stream2。步骤S408:服务器在Stream1上向客户端发送作为响应报文的HEADERS帧;上述HEADERS帧中包含状态(status)字段,例如:“:status=200”,用于标识响应状态;此外,HEADERS帧中还包含内容类型(content-type)字段,例如:“content-type=text/html”,用于标识后续帧中携带的数据的数据类型。此外,HEADERS帧中还包含内容长度(content-本文档来自技高网
...

【技术保护点】
一种HTTP报文处理方法,其特征在于,该方法包括:接收到包含用于标识支持服务端推模式的Expect头部字段的HTTP请求报文后,在与该HTTP请求报文相对应的长连接断开前,HTTP服务器重复执行如下处理:当前有数据需要推送时,在HTTP响应报文中标识该数据的长度,并将该数据包含在该HTTP响应报文中,通过所述长连接发送该HTTP响应报文。

【技术特征摘要】
1.一种HTTP报文处理方法,其特征在于,该方法包括:接收到包含用于标识支持服务端推模式的Expect头部字段的HTTP请求报文后,在与该HTTP请求报文相对应的长连接断开前,HTTP服务器重复执行如下处理:当前有数据需要推送时,在HTTP响应报文中标识该数据的长度,并将该数据包含在该HTTP响应报文中,通过所述长连接发送该HTTP响应报文。2.根据权利要求1所述的方法,其特征在于,所述用于标识支持服务端推模式的Expect头部字段中包含:用于标识支持服务端推模式的expectation-extension值。3.根据权利要求1所述的方法,其特征在于,当前有数据需要推送时,在包含所述数据的HTTP响应报文中设置如下状态码:用于标识有后续数据需要推送的状态码;或用于标识无后续数据需要推送的状态码。4.根据权利要求1所述的方法,其特征在于,接收到所述HTTP请求报文后,在与该HTTP请求报文相对应的长连接断开前,还包含如下步骤:HTTP服务器获知无后续数据需要推送时,使用所述长连接发送HTTP响应报文,在该HTTP响应报文中设置如下状态码:用于标识无后续数据需要推送的状态码。5.根据权利要求3所述的方法,其特征在于,所述用于标识有后续数据需要推送的状态码为:100continue。6.一种HTTP报文处理方法,其特征在于,该方法包括:HTTP客户端构造包含用于标识支持服务端推模式的Expect头部字段的HTTP请求报文,并发送该HTTP请求报文;在与该HTTP请求报文相对应的长连接断开前,HTTP客户端重复执行
\t如下处理:通过所述长连接接收HTTP响应报文。7.根据权利要求6所述的方法,其特征在于,所述用于标识支持服务端推模式的Expect头部字段中包含:用于标识支持服务端推模式的expectation-extension值。8.根据权利要求6所述的方法,其特征在于,通过所述长连接接收到HTTP响应报文后,HTTP客户端还执行如下处理:读取并判断所述HTTP响应报文中包含的状态码:如果所述状态码是用于标识有后续数据需要推送的状态码,则保持所述长连接的连接状态;和/或如果所述状态码是用于标识无后续数据需要推送的状态码,则断开所述长连接。9.根据权利要求8所述的方法,其特征在于,所述用于标识有后续数据需要推送的状态码为:100continue。10.一种HTTP服务器,其特征在于,该服务器中包括:服务器端接收模块,用于接收包含用于标识支持服务端推模式的E...

【专利技术属性】
技术研发人员:闵庆欢
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛;KY

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1