一种HTTP服务器中CGI请求的处理方法和系统与流程

文档序号:12278928阅读:1135来源:国知局
一种HTTP服务器中CGI请求的处理方法和系统与流程

本发明涉及通信技术领域,更为具体地说,涉及一种HTTP服务器中CGI请求的处理方法和系统。



背景技术:

嵌入式设备通常能够实现基于HTTP(Hyper-Text Transfer Protocol,超文本传输协议)的网络管理方式。嵌入式设备的服务器在b/s(browser/server,客户端浏览器/服务器)架构的网络管理方式中,通常作为响应HTTP请求的HTTP服务器存在;其中,HTTP请求包括用于获取嵌入式设备中动态资源的CGI(Common Gateway Interface,通用网关接口)请求。在上述b/s架构中,HTTP服务器在确定客户端浏览器发送的HTTP请求为CGI请求时,会将该CGI请求交给嵌入式设备中与之对应的CGI脚本程序进行处理。

图1为现有技术中CGI请求的处理流程示意图。如图1所示,嵌入式设备1中,HTTP服务器11接收客户端浏览器2发送的HTTP请求,在接收到客户端浏览器2发送的HTTP请求时,将启动该HTTP请求的处理进程,通过解析HTTP请求判断其是否为CGI请求。HTTP服务器11在判定HTTP请求为CGI请求时,将开启该CGI请求的处理进程,以通过CGI接口规范调用与该CGI请求对应的CGI脚本程序12对CGI请求进行处理。CGI脚本程序12确定该CGI请求所请求的业务数据的路径,例如当业务数据在数据库中13时,则根据上述路径从数据库13的相应存放位置中调取该业务数据给HTTP服务器11,以使HTTP服务器读取该业务数据,此时结束CGI请求的处理进程。HTTP服务器11读取该业务数据后,将该业务数据封装入HTTP响应报文,发送给原客户端浏览器2。

现有技术中,CGI脚本程序每被调用运行一次,CGI请求的处理进程就会被启动运行一次。如图1所示,在一定时间内,若有多个浏览器分别发送CGI请求或一个浏览器发送多个CGI请求,则可能有多个CGI请求的处理进程被启动运行。多个CGI请求的处理进程的启动运行会占用嵌入式设备过多的硬件资源,尤其是对于一些自身硬件资源有限的嵌入式设备(如基于同轴电缆的以太网传输EOC设备)。硬件资源占用过多将进一步导致系统卡顿,严重地,甚至会导致嵌入式设备的系统崩溃,需要重启方能恢复。



技术实现要素:

本发明的目的是提供一种HTTP服务器中CGI请求的处理的技术方案,以解决背景技术中所介绍的现有技术中接收多个CGI请求时,往往调用多个CGI请求的处理进程,占用嵌入式设备过多硬件资源的问题。

为了解决上述技术问题,本发明提供如下技术方案:

根据本发明的第一方面,提供了一种HTTP服务器中CGI请求的处理方法,用于HTTP服务器,所述方法包括:

在所述HTTP服务器中预生成处理函数信息表,其中,所述处理函数信息表中包含有CGI请求的请求名称与CGI处理函数的对应关系;

接收客户端浏览器发送的HTTP请求;

判断所述HTTP请求是否为CGI请求;

若所述HTTP请求为CGI请求,则提取所述CGI请求的请求名称,根据所述处理函数信息表中请求名称与CGI处理函数的对应关系,调取与所述CGI请求的请求名称对应的CGI处理函数;

使用调取的CGI处理函数处理所述CGI请求,得到与所述CGI请求对应的响应结果;

将所述响应结果发送至所述客户端浏览器。

优选地,所述提取CGI请求的请求名称,根据所述处理函数信息表中请求名称与CGI处理函数的对应关系,调取与所述CGI请求的请求名称对应的CGI处理函数,包括:

从所述CGI请求的统一资源定位符URL信息中提取所述CGI请求的请求名称;

判断所述处理函数信息表中是否存在与所述CGI请求的请求名称对应的CGI处理函数;

若所述处理函数信息表中存在与所述CGI请求的请求名称对应的CGI处理函数,则从内存中调取所述CGI处理函数;或者,

若所述处理函数信息表中不存在与所述CGI请求的请求名称对应的CGI处理函数,则向所述客户端浏览器发送响应失败消息。

优选地,所述使用调取的CGI处理函数处理所述CGI请求,得到与所述CGI请求对应的响应结果,包括:

根据所述CGI请求中的请求方法信息,确定所述CGI请求的请求方式;

若所述CGI请求的请求方式是GET请求方式,则对所述CGI请求的URL信息进行解析,得到表单数据,使用所述CGI处理函数对所述表单数据进行处理,得到相应的响应结果;或者,

若所述CGI请求的请求方式是POST请求方式,则确定所述CGI请求中报文实体的实体类型,根据与所述实体类型对应的解析方式对所述报文实体进行解析,得到表单数据,使用所述CGI处理函数对所述表单数据进行处理,得到相应的响应结果。

优选地,所述方法还包括:

若所述HTTP请求是静态资源请求,则根据所述静态资源请求的URL信息中包含的目标路径,打开对应的资源文件;

若所述资源文件打开成功,则读取所述资源文件的文件状态信息和文件内容;

将所述文件状态信息和文件内容发送至所述客户端浏览器。

优选地,所述方法还包括:

获取所述HTTP服务器所在系统中其他应用程序发送的系统进程间通信请求;

根据所述系统进程间通信请求的身份认证标识ID号与通信请求处理函数的对应关系,调取与所述系统进程间通信请求对应的通信请求处理函数;

使用调取的通信请求处理函数处理所述系统进程间通信请求,得到与所述系统进程间通信请求对应的响应结果。

根据本发明的第二方面,还提供了一种HTTP服务器中CGI请求的处理系统,用于HTTP服务器,所述系统包括:

生成模块,用于在所述HTTP服务器中预生成处理函数信息表,其中,所述处理函数信息表中包含有CGI请求的请求名称与CGI处理函数的对应关系;

接收模块,用于接收客户端浏览器发送的HTTP请求;

判断模块,用于判断所述HTTP请求是否为CGI请求;

调取模块,用于若所述判断模块判定所述HTTP请求为CGI请求时,提取所述CGI请求的请求名称,根据所述处理函数信息表中请求名称与CGI处理函数的对应关系,调取与所述CGI请求的请求名称对应的CGI处理函数;

处理模块,用于使用所述调取模块调取的CGI处理函数处理所述CGI请求,得到与所述CGI请求对应的响应结果;

发送模块,用于将所述响应结果发送至所述客户端浏览器。

优选地,所述调取模块,包括:

名称提取子模块,用于从所述CGI请求的统一资源定位符URL信息中提取所述CGI请求的请求名称;

函数判断子模块,用于判断所述处理函数信息表中是否存在与所述请求名称对应的CGI处理函数;

函数调取子模块,用于若所述函数判断子模块判定所述处理函数信息表中存在与所述请求名称对应的CGI处理函数时,从内存中调取所述CGI处理函数;

所述发送模块还用于若所述函数判断子模块判定所述处理函数信息表中不存在与所述请求名称对应的CGI处理函数时,向所述客户端浏览器发送响应失败消息。

优选地,所述处理模块,包括:

请求方式确定子模块,用于根据所述CGI请求中的请求方法信息,确定所述CGI请求的请求方式;

信息解析子模块,用于若所述CGI请求的请求方式是GET请求方式时,对所述CGI请求的URL信息进行解析,得到表单数据;第一表单数据处理子模块,用于使用所述CGI处理函数对所述表单数据进行处理,得到相应的响应结果;或者,

实体类型确定子模块,用于若所述CGI请求的请求方式是POST请求方式时,确定所述CGI请求中报文实体的实体类型;实体解析子模块,用于根据与所述实体类型对应的解析方式对所述报文实体进行解析,得到表单数据;

第二表单数据处理子模块,用于使用所述CGI处理函数对所述表单数据进行处理,得到相应的响应结果。

优选地,所述系统还包括:

开启模块,若所述HTTP请求是静态资源请求,则根据所述静态资源请求的URL信息中包含的目标路径,打开对应的资源文件;

读取模块,用于若所述资源文件打开成功时,读取所述资源文件的文件状态信息和文件内容;

所述发送模块,还用于将所述文件状态信息和文件内容发送至所述客户端浏览器。

优选地,所述接收模块,还用于获取所述HTTP服务器所在系统中其他应用程序发送的系统进程间通信请求;

所述调取模块,还用于根据所述系统进程间通信请求的身份认证标识ID号与通信请求处理函数的对应关系,调取与所述系统进程间通信请求对应的通信请求处理函数;

所述处理模块,还用于使用所述通信请求处理函数对所述系统进程间通信请求进行处理,得到与所述系统进程间通信请求对应的响应结果。

本发明提供的HTTP服务器中CGI请求的处理方案,首先,HTTP服务器预生成处理函数信息表,该处理函数信息表预存储CGI请求的请求名称与CGI处理函数的对应关系;然后,HTTP服务器在确定接收的HTTP请求是CGI请求时,将根据CGI请求的请求名称查询上述处理函数信息表,从处理函数信息表中确定与请求名称对应的CGI处理函数,以从内存中调取CGI处理函数;其次,HTTP服务器使用该CGI处理函数处理CGI请求,得到与CGI请求对应的响应结果;最后,HTTP服务器将该响应结果返回客户端浏览器。由于在本CGI请求的处理方案中,HTTP服务器中预先生成有处理函数信息表,通过查询处理函数信息表,HTTP服务器即可直接从内存中调用CGI处理函数处理CGI请求。相对于背景技术中提到的需要调用专门的CGI脚本程序处理CGI请求的处理方式,本方案不需要另外启动专门的CGI请求的处理进程,从而减少了进程的启动运行对硬件资源的过多占用,进一步避免进程过多而导致嵌入式设的系统卡顿,甚至崩溃,需要重启的情况。

应当理解的是,以上的一般描述和后位的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。

图1是现有技术中CGI请求的处理流程示意图;

图2是本发明实施例示出的一种应用场景图;

图3是本发明实施例示出的一种HTTP服务器中CGI请求的处理方法的流程示意图;

图4是图3所示实施例中的一种CGI处理函数调取方法的流程示意图;

图5是图3所示实施例中的一种CGI请求的处理方法的流程示意图;

图6是本发明实施例示出的一种HTTP请求的结构示意图;

图7是本发明实施例示出的一种静态资源请求的调度方法的流程示意图;

图8是本发明实施例示出的一种系统进程间通信请求的处理方法的流程示意图;

图9是本发明实施例示出的一种HTTP服务器中CGI请求的处理系统的结构示意图;

图10是图9所示实施例示出的一种调度模块的结构示意图;

图11是图9所示实施例示出的一种处理模块的结构示意图;

图12是本发明实施例示出的另一种CGI请求的处理系统的结构示意图。

具体实施方式

本发明实施例提供的HTTP服务器中CGI请求的处理方案,解决了背景技术中所介绍的现有技术中接收多个CGI请求时,往往会调用多个CGI请求的处理进程,会占用嵌入式设备过多硬件资源的问题。

为了使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明实施例中的技术方案作进一步详细的说明。

请参考附图2,附图2是本发明实施例示出的一种应用场景示意图,如图2所示,在该应用场景中,嵌入式系统1的HTTP服务器11用于接收客户端浏览器发送的HTTP请求。其处理过程如下:HTTP服务器11接收各个客户端浏览器(图2中客户端浏览器1……客户端浏览器n)发送的HTTP请求,判断该HTTP请求是否为CGI请求,若该HTTP请求是CGI请求,则提取该CGI请求的请求名称,查询处理函数信息表中与该请求名称对应的CGI处理函数名称,然后根据该CGI处理函数的名称从内存中对应存放地址中调取该CGI处理函数,进而使用该CGI处理函数处理上述CGI请求,得到与各个CGI请求对应的响应结果,最后将各个响应结果发送回各自对应的客户端浏览器2。其中,本发明实施例中的HTTP服务器11应用于嵌入式设备1,如EOC设备(Ethernet over Coax,基于同轴电缆的以太网传输设备)中。

请参考附图3,图3是本发明实施例示出的一种HTTP服务器中CGI请求的处理方法的流程示意图。本发明实施例提供的HTTP服务器中CGI请求的处理方法,用于HTTP服务器,如图3所示,该CGI请求的处理方法包括以下步骤:

S110:在HTTP服务器中预生成处理函数信息表,其中,处理函数信息表中包含有CGI请求的请求名称与CGI处理函数的对应关系。

通过在HTTP服务器内部预生成处理函数信息表,当接收到CGI请求时,直接查询该处理函数信息表即可得到与该CGI请求对应CGI处理函数,从而进一步可根据该CGI处理函数调用CGI处理函数处理该CGI请求。由于HTTP服务器可直接调用CGI处理函数处理CGI请求,不需要调用HTTP服务器之外的CGI脚本程序对CGI请求进行专门的处理。

S120:接收客户端浏览器发送的HTTP请求;

S130:判断该HTTP请求是否为CGI请求;

HTTP服务器通过HTTP请求的统一资源定位符URL信息判断该HTTP请求是否为CGI请求。例如:url=“URL:192.168.144.20/getMac”的URL中出现“getMac”信息,该HTTP请求即为CGI请求。

S140:若HTTP请求为CGI请求,则提取CGI请求的请求名称,根据处理函数信息表中请求名称与CGI处理函数的对应关系,调取与CGI请求的请求名称对应的CGI处理函数。

通常情况下,一般从CGI请求的统一资源定位符URL信息中提取CGI请求的请求名称,例如,URL:192.168.144.20/getMac中,“getMac”就是请求名称。

其中,处理函数信息表中具体包括CGI请求的请求名称和CGI处理函数的函数名称的对应关系,如CGI请求的请求名称“getMac”与CGI处理函数的函数名称“CGI_GetMac”的对应关系。查找到CGI处理函数的函数名称后,根据该函数名称通过编译器读取对应的CGI源码文件,为CGI函数对应的源码分配内存地址,然后HTTP服务器即可从内存中调取对应的CGI处理函数。

具体地,如图4所示,步骤S140具体包括以下步骤:

S210:从CGI请求的统一资源定位符URL信息中提取CGI请求的请求名称;

S220:判断处理函数信息表中是否存在与CGI请求的请求名称对应的CGI处理函数;

S230:若处理函数信息表中存在与CGI请求的请求名称对应的CGI处理函数,则根据CGI处理函数从内存地址调取CGI处理函数;具体根据CGI处理函数的函数名称从分配的内存地址读取CGI处理函数的具体内容,完成调取工作。或者,

S240:若处理函数信息表中不存在与请求名称对应的CGI处理函数,则向客户端浏览器发送响应失败消息。该响应失败消息(如:没有发现与请求对应的CGI处理函数)会封装在响应报文中发送给客户端浏览器,具体可封装在响应报文的起始行中。

通过提取该请求名称,根据请求名称与CGI处理函数的对应关系,即可从处理函数信息表中查询到与该请求名称对应的CGI处理函数,并使用编译器分配CGI处理函数的内存地址,从而使得HTTP服务器可直接从内存中调用CGI处理函数处理CGI请求,不需要另外启动进程,向HTTP服务器之外的CGI脚本程序发送CGI请求进行处理,因此,减少了嵌入式设备中硬件资源的消耗,尤其是接收到多个CGI请求时,也只需要HTTP服务器启动一个进程处理即可。

S150:使用调取的CGI处理函数处理CGI请求,得到与CGI请求对应的响应结果。

S160:将响应结果发送至客户端浏览器。

通过使用调取的CGI处理函数处理该CGI请求,得到并向客户端浏览器发送与CGI请求对应的响应结果,只会占用一个进程,而非另外启动专门的进程,将CGI请求发送至CGI脚本程序进行处理,从而能够节约HTTP服务器所在嵌入式设备的硬件资源(如CPU和内存等)。

本发明提供的HTTP服务器中CGI请求的处理方法,首先,HTTP服务器预生成处理函数信息表,该处理函数信息表预存储CGI请求的请求名称与CGI处理函数的对应关系;然后,HTTP服务器在确定接收的HTTP请求是CGI请求时,将根据CGI请求的请求名称查询上述处理函数信息表,从处理函数信息表中确定与请求名称对应的CGI处理函数,以从HTTP服务器自身的内存中调取CGI处理函数;其次,HTTP服务器使用该CGI处理函数处理CGI请求,得到与CGI请求对应的响应结果;最后,HTTP服务器将该响应结果返回客户端浏览器。由于在本CGI请求的处理方案中,HTTP服务器中预先生成有处理函数信息表,通过查询处理函数信息表,HTTP服务器即可直接从内存中调用CGI处理函数处理CGI请求。相对于背景技术中提到的需要调用专门的CGI脚本程序处理CGI请求的处理方式,本方案只需要HTTP服务器启动一个处理进程即可,即使是在同一时间有多个CGI请求需要处理,HTTP服务器也只需要启动一个进程,在HTTP服务器内部调用CGI处理函数进行处理。HTTP服务器不需要另外启动专门的CGI请求的处理进程,从而减少了进程的启动运行对硬件资源的过多占用,进一步避免进程过多而导致嵌入式设备的系统卡顿,甚至系统崩溃,需要重启的情况。

如图5所示,图3所示实施例中的步骤S150:使用调取的CGI处理函数处理CGI请求,得到与CGI请求对应的响应结果,包括以下步骤:

S310:根据所述CGI请求中的请求方法信息,确定所述CGI请求的请求方式;若所述CGI请求的请求方式是GET请求方式,则执行下述步骤S320;若是POST方式,则执行下述步骤S330。

CGI请求的请求方式主要包括GET、POST、PUT和DELETE四种方式,其中GET和POST请求方式应用最为常见。CGI请求本质是一种HTTP请求,如图6所示,图6是本发明实施例示出的一种HTTP请求的结构示意图。根据HTTP协议的规定,HTTP请求主要包括起始行、报文首部和报文实体三部分。起始行为HTTP报文的第一行,包括请求方法信息、请求的统一资源定位符和HTTP版本三部分。首部为报文的附加信息,以名/值对列表的方式存在,其包含报文内容长度、Cookie内容、使用的代理浏览器等信息。其中每一名/值对列表占用一行,并且在行尾有行结束符。实体部分为HTTP要传输的内容,如需要提交的表单数据和需要上传的文件等。其中,CGI的请求方式主要通过起始行中的请求方法确定。

S320:对所述CGI请求的URL信息进行解析,得到表单数据,使用所述CGI处理函数对所述表单数据进行处理,得到相应的响应结果。

在GET请求方式中,表单数据存储在URL信息中,因此通过对CGI请求的URL信息进行解析,能够得到表单数据,通过使用CGI处理函数对该表单数据进行处理得到相应的响应结果。避免了传统方式中需要另外启动进程,由HTTP服务器之外的CGI脚本程序处理表单数据而带来的硬件资源消耗的情况。

在得到与CGI请求对应的响应数据的响应结果后,会将响应数据封装入响应报文的实体中,并在响应报文的起始行中添加对应的响应状态,例如:响应成功;在未得到与CGI请求对应的响应数据或者没有发现对应的CGI处理函数时,会在响应报文的起始行中添加对应的响应状态,例如:没有发现请求对应的响应结果。

或者,

S330:确定所述CGI请求中报文实体的实体类型,根据与所述实体类型对应的解析方式对所述报文实体进行解析,得到表单数据,使用所述CGI处理函数对所述表单数据进行处理,得到相应的响应结果。

在POST请求方式中,表单数据存储在CGI请求的报文实体中,CGI请求中报文实体的实体类型存储在CGI请求的报文首部中,以名-值对的形式存在,HTTP服务器首先接收CGI请求的起始行信息,根据起始行信息确定CGI请求的请求方式是POST请求方式,然后继续接收CGI请求的报文首部部分,根据报文首部判断报文实体的实体类型后继续接收报文实体。实体类型主要包括Application类型和Multipart类型两部分。在Application类型中,报文实体只有页面表单的基本数据,并没有文件上传,此时,可直接采用与Application类型对应的解析方式对报文实体进行解析,得到表单数据;若实体类型为Multipart类型,则表示报文实体中有多个被分隔符Boundary分隔开的表单数据,可能存在上传的文件;此时,可采用与Multipart类型对应的解析方式对报文实体进行解析,根据分隔符Boundary,将报文实体进行分割,得到表单数据,例如:对报文实体进行解码,得到表单中每一项名称与对应值。其中,若有上传的文件,则直接将该文件上传至HTTP服务器中。

在使用CGI处理函数对表单数据进行处理,得到与CGI请求对应的响应数据后,可将响应数据封装入响应报文的实体中,并在响应报文的起始行中添加对应的响应状态(例如:响应成功);在未得到与CGI请求对应的响应数据或者没有发现对应的CGI处理函数时,会在响应报文的起始行中添加对应的响应状态(例如:没有发现对应的请求结果)。

另外,HTTP请求除了用于请求动态资源的CGI请求外,还包括静态资源请求,为了获得静态资源,如图7所示,图3所示实施例中的HTTP服务器中CGI请求的处理方法还包括:

S410:若HTTP请求是静态资源请求,则根据静态资源请求的URL信息中包含的目标路径,打开对应的资源文件;

静态资源包括HTML以及JS等源码或者图片、视频等资源。HTTP服务器可通过HTTP请求的统一资源定位符URL信息确定其是否为静态资源请求,通过URL信息中的目标路径,可直接打开对应的资源文件。其中,若HTTP服务器打开资源文件失败,则在向客户端浏览器发送的响应报文的起始行中添加响应失败的响应结果,如在响应报文中添加“没有发现对应的请求文件”的信息。

S420:若资源文件打开成功,则读取资源文件的文件状态信息和文件内容;

其中,文件状态信息包括文件大小信息、读写权限、上次修改时间等文件状态;HTTP服务器在获取到文件大小信息时,可判断文件大小是否为0,若文件大小为0,则在向客户端浏览器发送的响应报文的起始行中添加响应失败的响应结果。

S430:将文件状态信息和文件内容发送至客户端浏览器。

发送至客户端浏览器的文件状态信息主要包括文件大小信息,其中在将文件状态信息和文件内容封装入响应报文发送至客户端浏览器时,首先发送响应报文的起始行和首部,其中,起始行指出响应结果:请求成功。资源文件的首部包括报文实体的类型、报文实体长度等信息。而报文实体包括文件内容。

作为本发明的另一种实施例,本方案还可以接收系统进程间通信请求;如图8所示,图8所示实施例除了图3所示方法外,还包括:

S510:获取HTTP服务器所在系统中其他应用程序发送的系统进程间通信请求。

S520:根据系统进程间通信请求的身份认证标识ID号与通信请求处理函数的对应关系,从内存中调取与系统进程间通信请求对应的通信请求处理函数。

系统进程间通信请求可通过ID号进行区分,在HTTP服务器中能够预生成包含各个系统进程间通信请求的ID号与通信请求处理函数的对应关系的关系信息表,根据该ID号与相应通信请求处理函数的对应关系,即可查询到与该系统进程间通信请求对应的通信请求处理函数,从而使得HTTP服务器可直接从内存中直接调用不同类型的通信请求处理函数处理各种系统进程间通信请求。如:HTTP服务器接收Upgrade进程发送的msg信息,根据该msg信息的id调用对应的处理函数进行处理,从而通过该msg信息确知系统升级成功。

S530:使用调取的通信请求处理函数对系统进程间通信请求进行处理,得到与系统进程间通信请求对应的响应结果。

通过在HTTP服务器中添加处理系统进程间通信请求的功能,从而作为统一的处理平台集中处理系统中其他应用程序发送的各种不同类型的系统进程间通信请求。

并且由于嵌入式设备中,HTTP服务器能够作为统一的处理平台集中处理各种不同类型的系统进程间通信请求,因此各种不同类型的系统进程间通信请求在HTTP服务器的处理进程中可由HTTP服务器调用通信请求处理函数直接进行处理,不会占用过多进程,减少了嵌入式设备中硬件资源(如内存和CPU)的消耗。

另外,本发明实施例提供的方法中,HTTP服务器也可对CGI请求进行用户认证,具体可在查询处理函数信息表之前进行认证。

基于同一发明构思,本申请实施例还提供了HTTP服务器中CGI请求的处理系统,由于系统对应的方法是本申请实施例中的HTTP服务器中CGI请求的处理方法,并且该系统解决问题的原理与方法相似,因此该系统的实施可以参见方法的实施,重复之处不再赘述。

请参考图9,图9为本发明实施例提供的一种HTTP服务器中CGI请求的处理系统的结构示意图,该CGI请求的处理系统用于HTTP服务器,所述系统包括:

生成模块901,用于在所述HTTP服务器中预生成处理函数信息表,其中,所述处理函数信息表中包含有CGI请求的请求名称与CGI处理函数的对应关系;

接收模块902,用于接收客户端浏览器发送的HTTP请求;

判断模块903,用于判断所述HTTP请求是否为CGI请求;

调取模块904,用于若所述判断模块903判定所述HTTP请求为CGI请求时,提取所述CGI请求的请求名称,根据所述处理函数信息表中请求名称与CGI处理函数的对应关系,调取与所述CGI请求的请求名称对应的CGI处理函数;

处理模块905,用于使用所述调取模块904调取的CGI处理函数处理所述CGI请求,得到与所述CGI请求对应的响应结果;

发送模块906,用于将所述响应结果发送至所述客户端浏览器。

图9所示的调取模块904主要根据CGI请求的请求名称进行调取,如图10所示,调取模块904包括:

名称提取子模块9041,用于从所述CGI请求的统一资源定位符URL信息中提取所述CGI请求的请求名称;

函数判断子模块9042,用于判断所述处理函数信息表中是否存在与所述请求名称对应的CGI处理函数;

函数调取子模块9043,用于若所述函数判断子模块9042判定处理函数信息表中存在与所述请求名称对应的CGI处理函数时,从内存中调取所述CGI处理函数;

所述发送模块906还用于若所述函数判断子模块9042判定处理函数信息表中不存在与所述请求名称对应的CGI处理函数时,向所述客户端浏览器发送响应失败消息。

CGI请求中可能包括大量的表单数据,为了对表单数据进行处理,如图11所示,处理模块905包括:

请求方式确定子模块9051,用于根据所述CGI请求中的请求方法信息,确定所述CGI请求的请求方式;

信息解析子模块9052,用于若所述CGI请求的请求方式是GET请求方式时,对所述CGI请求的URL信息进行解析,得到表单数据;

第一表单数据处理子模块9053,用于使用所述CGI处理函数对所述表单数据进行处理,得到相应的响应结果;

或者,

实体类型确定子模块9054,用于若所述CGI请求的请求方式是POST请求方式时,确定所述CGI请求中报文实体的实体类型;

实体解析子模块9055,用于根据与所述实体类型对应的解析方式对所述报文实体进行解析,得到表单数据;

第二表单数据处理子模块9056,用于使用所述CGI处理函数对所述表单数据进行处理,得到相应的响应结果。

另外,本HTTP服务器还可以处理静态资源请求,如图12所示,CGI请求处理系统除了图9所示的模块外,还包括:

开启模块907,若判断模块903判定HTTP请求是静态资源请求,则根据所述静态资源请求的URL信息中包含的目标路径,打开对应的资源文件;

读取模块908,用于若所述资源文件打开成功时,读取所述资源文件的文件状态信息和文件内容;

所述发送模块906,还用于将所述文件状态信息和文件内容发送至所述客户端浏览器。

优选地,所述接收模块902,还用于获取所述HTTP服务器所在系统中其他应用程序发送的系统进程间通信请求;

所述调取模块904,还用于根据所述系统进程间通信请求的身份认证标识ID号与通信请求处理函数的对应关系,调取与所述系统进程间通信请求对应的处理函数;

所述处理模块905,还用于使用所述处理函数对所述系统进程间通信请求进行处理,得到与所述系统进程间通信请求对应的响应结果;

所述发送模块906,还用于将所述响应结果发送至所述其他应用程序。

本发明上述实施例提供的HTTP服务器中CGI请求的处理方案,首先,HTTP服务器预生成处理函数信息表,该处理函数信息表预存储CGI请求的请求名称与CGI处理函数的对应关系;然后,HTTP服务器在确定接收的HTTP请求是CGI请求时,将根据CGI请求的请求名称查询上述处理函数信息表,从处理函数信息表中确定与请求名称对应的CGI处理函数,以从内存中调取CGI处理函数;其次,HTTP服务器使用该CGI处理函数处理CGI请求,得到与CGI请求对应的响应结果;最后,HTTP服务器将该响应结果返回客户端浏览器。由于在本CGI请求的处理方案中,HTTP服务器中预先生成有处理函数信息表,通过查询处理函数信息表,HTTP服务器即可直接从内存中调用CGI处理函数处理CGI请求。相对于背景技术中提到的需要调用专门的CGI脚本程序处理CGI请求的处理方式,本方案不需要另外启动专门的CGI请求的处理进程,从而减少了进程的启动运行对硬件资源的过多占用,进一步避免进程过多而导致嵌入式设备的系统崩溃,需要重启的情况。

本领域内的技术人员应当明白,本发明的实施例可提供为方法、装置或计算机程序产品。因此,本发明可采用完全硬件实施例,完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包括有计算机可用程序代码的计算机可用存储介质(包括但不限于硬盘存储器、CD-ROM、光学存储器等)上实时的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或奇特可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方块或多个方块中指定的功能的装置。

这些计算机程序指令也可以存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机课读存储器中,使得存储在该计算机课读存储器中是指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方块或多个方块中指定的功能。

这些计算机程序指令也可以装置到计算机或其他科编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方块或多个方块中指定的功能的步骤。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其它实施例的不同之处。

以上的本发明实施方式,并不构成对本发明保护范围的限定。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1