亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種HTTP服務(wù)器中CGI請求的處理方法和系統(tǒng)與流程

文檔序號:12278928閱讀:1202來源:國知局
一種HTTP服務(wù)器中CGI請求的處理方法和系統(tǒng)與流程

本發(fā)明涉及通信技術(shù)領(lǐng)域,更為具體地說,涉及一種HTTP服務(wù)器中CGI請求的處理方法和系統(tǒng)。



背景技術(shù):

嵌入式設(shè)備通常能夠?qū)崿F(xiàn)基于HTTP(Hyper-Text Transfer Protocol,超文本傳輸協(xié)議)的網(wǎng)絡(luò)管理方式。嵌入式設(shè)備的服務(wù)器在b/s(browser/server,客戶端瀏覽器/服務(wù)器)架構(gòu)的網(wǎng)絡(luò)管理方式中,通常作為響應(yīng)HTTP請求的HTTP服務(wù)器存在;其中,HTTP請求包括用于獲取嵌入式設(shè)備中動態(tài)資源的CGI(Common Gateway Interface,通用網(wǎng)關(guān)接口)請求。在上述b/s架構(gòu)中,HTTP服務(wù)器在確定客戶端瀏覽器發(fā)送的HTTP請求為CGI請求時(shí),會將該CGI請求交給嵌入式設(shè)備中與之對應(yīng)的CGI腳本程序進(jìn)行處理。

圖1為現(xiàn)有技術(shù)中CGI請求的處理流程示意圖。如圖1所示,嵌入式設(shè)備1中,HTTP服務(wù)器11接收客戶端瀏覽器2發(fā)送的HTTP請求,在接收到客戶端瀏覽器2發(fā)送的HTTP請求時(shí),將啟動該HTTP請求的處理進(jìn)程,通過解析HTTP請求判斷其是否為CGI請求。HTTP服務(wù)器11在判定HTTP請求為CGI請求時(shí),將開啟該CGI請求的處理進(jìn)程,以通過CGI接口規(guī)范調(diào)用與該CGI請求對應(yīng)的CGI腳本程序12對CGI請求進(jìn)行處理。CGI腳本程序12確定該CGI請求所請求的業(yè)務(wù)數(shù)據(jù)的路徑,例如當(dāng)業(yè)務(wù)數(shù)據(jù)在數(shù)據(jù)庫中13時(shí),則根據(jù)上述路徑從數(shù)據(jù)庫13的相應(yīng)存放位置中調(diào)取該業(yè)務(wù)數(shù)據(jù)給HTTP服務(wù)器11,以使HTTP服務(wù)器讀取該業(yè)務(wù)數(shù)據(jù),此時(shí)結(jié)束CGI請求的處理進(jìn)程。HTTP服務(wù)器11讀取該業(yè)務(wù)數(shù)據(jù)后,將該業(yè)務(wù)數(shù)據(jù)封裝入HTTP響應(yīng)報(bào)文,發(fā)送給原客戶端瀏覽器2。

現(xiàn)有技術(shù)中,CGI腳本程序每被調(diào)用運(yùn)行一次,CGI請求的處理進(jìn)程就會被啟動運(yùn)行一次。如圖1所示,在一定時(shí)間內(nèi),若有多個(gè)瀏覽器分別發(fā)送CGI請求或一個(gè)瀏覽器發(fā)送多個(gè)CGI請求,則可能有多個(gè)CGI請求的處理進(jìn)程被啟動運(yùn)行。多個(gè)CGI請求的處理進(jìn)程的啟動運(yùn)行會占用嵌入式設(shè)備過多的硬件資源,尤其是對于一些自身硬件資源有限的嵌入式設(shè)備(如基于同軸電纜的以太網(wǎng)傳輸EOC設(shè)備)。硬件資源占用過多將進(jìn)一步導(dǎo)致系統(tǒng)卡頓,嚴(yán)重地,甚至?xí)?dǎo)致嵌入式設(shè)備的系統(tǒng)崩潰,需要重啟方能恢復(fù)。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明的目的是提供一種HTTP服務(wù)器中CGI請求的處理的技術(shù)方案,以解決背景技術(shù)中所介紹的現(xiàn)有技術(shù)中接收多個(gè)CGI請求時(shí),往往調(diào)用多個(gè)CGI請求的處理進(jìn)程,占用嵌入式設(shè)備過多硬件資源的問題。

為了解決上述技術(shù)問題,本發(fā)明提供如下技術(shù)方案:

根據(jù)本發(fā)明的第一方面,提供了一種HTTP服務(wù)器中CGI請求的處理方法,用于HTTP服務(wù)器,所述方法包括:

在所述HTTP服務(wù)器中預(yù)生成處理函數(shù)信息表,其中,所述處理函數(shù)信息表中包含有CGI請求的請求名稱與CGI處理函數(shù)的對應(yīng)關(guān)系;

接收客戶端瀏覽器發(fā)送的HTTP請求;

判斷所述HTTP請求是否為CGI請求;

若所述HTTP請求為CGI請求,則提取所述CGI請求的請求名稱,根據(jù)所述處理函數(shù)信息表中請求名稱與CGI處理函數(shù)的對應(yīng)關(guān)系,調(diào)取與所述CGI請求的請求名稱對應(yīng)的CGI處理函數(shù);

使用調(diào)取的CGI處理函數(shù)處理所述CGI請求,得到與所述CGI請求對應(yīng)的響應(yīng)結(jié)果;

將所述響應(yīng)結(jié)果發(fā)送至所述客戶端瀏覽器。

優(yōu)選地,所述提取CGI請求的請求名稱,根據(jù)所述處理函數(shù)信息表中請求名稱與CGI處理函數(shù)的對應(yīng)關(guān)系,調(diào)取與所述CGI請求的請求名稱對應(yīng)的CGI處理函數(shù),包括:

從所述CGI請求的統(tǒng)一資源定位符URL信息中提取所述CGI請求的請求名稱;

判斷所述處理函數(shù)信息表中是否存在與所述CGI請求的請求名稱對應(yīng)的CGI處理函數(shù);

若所述處理函數(shù)信息表中存在與所述CGI請求的請求名稱對應(yīng)的CGI處理函數(shù),則從內(nèi)存中調(diào)取所述CGI處理函數(shù);或者,

若所述處理函數(shù)信息表中不存在與所述CGI請求的請求名稱對應(yīng)的CGI處理函數(shù),則向所述客戶端瀏覽器發(fā)送響應(yīng)失敗消息。

優(yōu)選地,所述使用調(diào)取的CGI處理函數(shù)處理所述CGI請求,得到與所述CGI請求對應(yīng)的響應(yīng)結(jié)果,包括:

根據(jù)所述CGI請求中的請求方法信息,確定所述CGI請求的請求方式;

若所述CGI請求的請求方式是GET請求方式,則對所述CGI請求的URL信息進(jìn)行解析,得到表單數(shù)據(jù),使用所述CGI處理函數(shù)對所述表單數(shù)據(jù)進(jìn)行處理,得到相應(yīng)的響應(yīng)結(jié)果;或者,

若所述CGI請求的請求方式是POST請求方式,則確定所述CGI請求中報(bào)文實(shí)體的實(shí)體類型,根據(jù)與所述實(shí)體類型對應(yīng)的解析方式對所述報(bào)文實(shí)體進(jìn)行解析,得到表單數(shù)據(jù),使用所述CGI處理函數(shù)對所述表單數(shù)據(jù)進(jìn)行處理,得到相應(yīng)的響應(yīng)結(jié)果。

優(yōu)選地,所述方法還包括:

若所述HTTP請求是靜態(tài)資源請求,則根據(jù)所述靜態(tài)資源請求的URL信息中包含的目標(biāo)路徑,打開對應(yīng)的資源文件;

若所述資源文件打開成功,則讀取所述資源文件的文件狀態(tài)信息和文件內(nèi)容;

將所述文件狀態(tài)信息和文件內(nèi)容發(fā)送至所述客戶端瀏覽器。

優(yōu)選地,所述方法還包括:

獲取所述HTTP服務(wù)器所在系統(tǒng)中其他應(yīng)用程序發(fā)送的系統(tǒng)進(jìn)程間通信請求;

根據(jù)所述系統(tǒng)進(jìn)程間通信請求的身份認(rèn)證標(biāo)識ID號與通信請求處理函數(shù)的對應(yīng)關(guān)系,調(diào)取與所述系統(tǒng)進(jìn)程間通信請求對應(yīng)的通信請求處理函數(shù);

使用調(diào)取的通信請求處理函數(shù)處理所述系統(tǒng)進(jìn)程間通信請求,得到與所述系統(tǒng)進(jìn)程間通信請求對應(yīng)的響應(yīng)結(jié)果。

根據(jù)本發(fā)明的第二方面,還提供了一種HTTP服務(wù)器中CGI請求的處理系統(tǒng),用于HTTP服務(wù)器,所述系統(tǒng)包括:

生成模塊,用于在所述HTTP服務(wù)器中預(yù)生成處理函數(shù)信息表,其中,所述處理函數(shù)信息表中包含有CGI請求的請求名稱與CGI處理函數(shù)的對應(yīng)關(guān)系;

接收模塊,用于接收客戶端瀏覽器發(fā)送的HTTP請求;

判斷模塊,用于判斷所述HTTP請求是否為CGI請求;

調(diào)取模塊,用于若所述判斷模塊判定所述HTTP請求為CGI請求時(shí),提取所述CGI請求的請求名稱,根據(jù)所述處理函數(shù)信息表中請求名稱與CGI處理函數(shù)的對應(yīng)關(guān)系,調(diào)取與所述CGI請求的請求名稱對應(yīng)的CGI處理函數(shù);

處理模塊,用于使用所述調(diào)取模塊調(diào)取的CGI處理函數(shù)處理所述CGI請求,得到與所述CGI請求對應(yīng)的響應(yīng)結(jié)果;

發(fā)送模塊,用于將所述響應(yīng)結(jié)果發(fā)送至所述客戶端瀏覽器。

優(yōu)選地,所述調(diào)取模塊,包括:

名稱提取子模塊,用于從所述CGI請求的統(tǒng)一資源定位符URL信息中提取所述CGI請求的請求名稱;

函數(shù)判斷子模塊,用于判斷所述處理函數(shù)信息表中是否存在與所述請求名稱對應(yīng)的CGI處理函數(shù);

函數(shù)調(diào)取子模塊,用于若所述函數(shù)判斷子模塊判定所述處理函數(shù)信息表中存在與所述請求名稱對應(yīng)的CGI處理函數(shù)時(shí),從內(nèi)存中調(diào)取所述CGI處理函數(shù);

所述發(fā)送模塊還用于若所述函數(shù)判斷子模塊判定所述處理函數(shù)信息表中不存在與所述請求名稱對應(yīng)的CGI處理函數(shù)時(shí),向所述客戶端瀏覽器發(fā)送響應(yīng)失敗消息。

優(yōu)選地,所述處理模塊,包括:

請求方式確定子模塊,用于根據(jù)所述CGI請求中的請求方法信息,確定所述CGI請求的請求方式;

信息解析子模塊,用于若所述CGI請求的請求方式是GET請求方式時(shí),對所述CGI請求的URL信息進(jìn)行解析,得到表單數(shù)據(jù);第一表單數(shù)據(jù)處理子模塊,用于使用所述CGI處理函數(shù)對所述表單數(shù)據(jù)進(jìn)行處理,得到相應(yīng)的響應(yīng)結(jié)果;或者,

實(shí)體類型確定子模塊,用于若所述CGI請求的請求方式是POST請求方式時(shí),確定所述CGI請求中報(bào)文實(shí)體的實(shí)體類型;實(shí)體解析子模塊,用于根據(jù)與所述實(shí)體類型對應(yīng)的解析方式對所述報(bào)文實(shí)體進(jìn)行解析,得到表單數(shù)據(jù);

第二表單數(shù)據(jù)處理子模塊,用于使用所述CGI處理函數(shù)對所述表單數(shù)據(jù)進(jìn)行處理,得到相應(yīng)的響應(yīng)結(jié)果。

優(yōu)選地,所述系統(tǒng)還包括:

開啟模塊,若所述HTTP請求是靜態(tài)資源請求,則根據(jù)所述靜態(tài)資源請求的URL信息中包含的目標(biāo)路徑,打開對應(yīng)的資源文件;

讀取模塊,用于若所述資源文件打開成功時(shí),讀取所述資源文件的文件狀態(tài)信息和文件內(nèi)容;

所述發(fā)送模塊,還用于將所述文件狀態(tài)信息和文件內(nèi)容發(fā)送至所述客戶端瀏覽器。

優(yōu)選地,所述接收模塊,還用于獲取所述HTTP服務(wù)器所在系統(tǒng)中其他應(yīng)用程序發(fā)送的系統(tǒng)進(jìn)程間通信請求;

所述調(diào)取模塊,還用于根據(jù)所述系統(tǒng)進(jìn)程間通信請求的身份認(rèn)證標(biāo)識ID號與通信請求處理函數(shù)的對應(yīng)關(guān)系,調(diào)取與所述系統(tǒng)進(jìn)程間通信請求對應(yīng)的通信請求處理函數(shù);

所述處理模塊,還用于使用所述通信請求處理函數(shù)對所述系統(tǒng)進(jìn)程間通信請求進(jìn)行處理,得到與所述系統(tǒng)進(jìn)程間通信請求對應(yīng)的響應(yīng)結(jié)果。

本發(fā)明提供的HTTP服務(wù)器中CGI請求的處理方案,首先,HTTP服務(wù)器預(yù)生成處理函數(shù)信息表,該處理函數(shù)信息表預(yù)存儲CGI請求的請求名稱與CGI處理函數(shù)的對應(yīng)關(guān)系;然后,HTTP服務(wù)器在確定接收的HTTP請求是CGI請求時(shí),將根據(jù)CGI請求的請求名稱查詢上述處理函數(shù)信息表,從處理函數(shù)信息表中確定與請求名稱對應(yīng)的CGI處理函數(shù),以從內(nèi)存中調(diào)取CGI處理函數(shù);其次,HTTP服務(wù)器使用該CGI處理函數(shù)處理CGI請求,得到與CGI請求對應(yīng)的響應(yīng)結(jié)果;最后,HTTP服務(wù)器將該響應(yīng)結(jié)果返回客戶端瀏覽器。由于在本CGI請求的處理方案中,HTTP服務(wù)器中預(yù)先生成有處理函數(shù)信息表,通過查詢處理函數(shù)信息表,HTTP服務(wù)器即可直接從內(nèi)存中調(diào)用CGI處理函數(shù)處理CGI請求。相對于背景技術(shù)中提到的需要調(diào)用專門的CGI腳本程序處理CGI請求的處理方式,本方案不需要另外啟動專門的CGI請求的處理進(jìn)程,從而減少了進(jìn)程的啟動運(yùn)行對硬件資源的過多占用,進(jìn)一步避免進(jìn)程過多而導(dǎo)致嵌入式設(shè)的系統(tǒng)卡頓,甚至崩潰,需要重啟的情況。

應(yīng)當(dāng)理解的是,以上的一般描述和后位的細(xì)節(jié)描述僅是示例性和解釋性的,并不能限制本公開。

附圖說明

為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對實(shí)施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,對于本領(lǐng)域普通技術(shù)人員而言,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其它的附圖。

圖1是現(xiàn)有技術(shù)中CGI請求的處理流程示意圖;

圖2是本發(fā)明實(shí)施例示出的一種應(yīng)用場景圖;

圖3是本發(fā)明實(shí)施例示出的一種HTTP服務(wù)器中CGI請求的處理方法的流程示意圖;

圖4是圖3所示實(shí)施例中的一種CGI處理函數(shù)調(diào)取方法的流程示意圖;

圖5是圖3所示實(shí)施例中的一種CGI請求的處理方法的流程示意圖;

圖6是本發(fā)明實(shí)施例示出的一種HTTP請求的結(jié)構(gòu)示意圖;

圖7是本發(fā)明實(shí)施例示出的一種靜態(tài)資源請求的調(diào)度方法的流程示意圖;

圖8是本發(fā)明實(shí)施例示出的一種系統(tǒng)進(jìn)程間通信請求的處理方法的流程示意圖;

圖9是本發(fā)明實(shí)施例示出的一種HTTP服務(wù)器中CGI請求的處理系統(tǒng)的結(jié)構(gòu)示意圖;

圖10是圖9所示實(shí)施例示出的一種調(diào)度模塊的結(jié)構(gòu)示意圖;

圖11是圖9所示實(shí)施例示出的一種處理模塊的結(jié)構(gòu)示意圖;

圖12是本發(fā)明實(shí)施例示出的另一種CGI請求的處理系統(tǒng)的結(jié)構(gòu)示意圖。

具體實(shí)施方式

本發(fā)明實(shí)施例提供的HTTP服務(wù)器中CGI請求的處理方案,解決了背景技術(shù)中所介紹的現(xiàn)有技術(shù)中接收多個(gè)CGI請求時(shí),往往會調(diào)用多個(gè)CGI請求的處理進(jìn)程,會占用嵌入式設(shè)備過多硬件資源的問題。

為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明實(shí)施例中的技術(shù)方案,并使本發(fā)明實(shí)施例的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖對本發(fā)明實(shí)施例中的技術(shù)方案作進(jìn)一步詳細(xì)的說明。

請參考附圖2,附圖2是本發(fā)明實(shí)施例示出的一種應(yīng)用場景示意圖,如圖2所示,在該應(yīng)用場景中,嵌入式系統(tǒng)1的HTTP服務(wù)器11用于接收客戶端瀏覽器發(fā)送的HTTP請求。其處理過程如下:HTTP服務(wù)器11接收各個(gè)客戶端瀏覽器(圖2中客戶端瀏覽器1……客戶端瀏覽器n)發(fā)送的HTTP請求,判斷該HTTP請求是否為CGI請求,若該HTTP請求是CGI請求,則提取該CGI請求的請求名稱,查詢處理函數(shù)信息表中與該請求名稱對應(yīng)的CGI處理函數(shù)名稱,然后根據(jù)該CGI處理函數(shù)的名稱從內(nèi)存中對應(yīng)存放地址中調(diào)取該CGI處理函數(shù),進(jìn)而使用該CGI處理函數(shù)處理上述CGI請求,得到與各個(gè)CGI請求對應(yīng)的響應(yīng)結(jié)果,最后將各個(gè)響應(yīng)結(jié)果發(fā)送回各自對應(yīng)的客戶端瀏覽器2。其中,本發(fā)明實(shí)施例中的HTTP服務(wù)器11應(yīng)用于嵌入式設(shè)備1,如EOC設(shè)備(Ethernet over Coax,基于同軸電纜的以太網(wǎng)傳輸設(shè)備)中。

請參考附圖3,圖3是本發(fā)明實(shí)施例示出的一種HTTP服務(wù)器中CGI請求的處理方法的流程示意圖。本發(fā)明實(shí)施例提供的HTTP服務(wù)器中CGI請求的處理方法,用于HTTP服務(wù)器,如圖3所示,該CGI請求的處理方法包括以下步驟:

S110:在HTTP服務(wù)器中預(yù)生成處理函數(shù)信息表,其中,處理函數(shù)信息表中包含有CGI請求的請求名稱與CGI處理函數(shù)的對應(yīng)關(guān)系。

通過在HTTP服務(wù)器內(nèi)部預(yù)生成處理函數(shù)信息表,當(dāng)接收到CGI請求時(shí),直接查詢該處理函數(shù)信息表即可得到與該CGI請求對應(yīng)CGI處理函數(shù),從而進(jìn)一步可根據(jù)該CGI處理函數(shù)調(diào)用CGI處理函數(shù)處理該CGI請求。由于HTTP服務(wù)器可直接調(diào)用CGI處理函數(shù)處理CGI請求,不需要調(diào)用HTTP服務(wù)器之外的CGI腳本程序?qū)GI請求進(jìn)行專門的處理。

S120:接收客戶端瀏覽器發(fā)送的HTTP請求;

S130:判斷該HTTP請求是否為CGI請求;

HTTP服務(wù)器通過HTTP請求的統(tǒng)一資源定位符URL信息判斷該HTTP請求是否為CGI請求。例如:url=“URL:192.168.144.20/getMac”的URL中出現(xiàn)“getMac”信息,該HTTP請求即為CGI請求。

S140:若HTTP請求為CGI請求,則提取CGI請求的請求名稱,根據(jù)處理函數(shù)信息表中請求名稱與CGI處理函數(shù)的對應(yīng)關(guān)系,調(diào)取與CGI請求的請求名稱對應(yīng)的CGI處理函數(shù)。

通常情況下,一般從CGI請求的統(tǒng)一資源定位符URL信息中提取CGI請求的請求名稱,例如,URL:192.168.144.20/getMac中,“getMac”就是請求名稱。

其中,處理函數(shù)信息表中具體包括CGI請求的請求名稱和CGI處理函數(shù)的函數(shù)名稱的對應(yīng)關(guān)系,如CGI請求的請求名稱“getMac”與CGI處理函數(shù)的函數(shù)名稱“CGI_GetMac”的對應(yīng)關(guān)系。查找到CGI處理函數(shù)的函數(shù)名稱后,根據(jù)該函數(shù)名稱通過編譯器讀取對應(yīng)的CGI源碼文件,為CGI函數(shù)對應(yīng)的源碼分配內(nèi)存地址,然后HTTP服務(wù)器即可從內(nèi)存中調(diào)取對應(yīng)的CGI處理函數(shù)。

具體地,如圖4所示,步驟S140具體包括以下步驟:

S210:從CGI請求的統(tǒng)一資源定位符URL信息中提取CGI請求的請求名稱;

S220:判斷處理函數(shù)信息表中是否存在與CGI請求的請求名稱對應(yīng)的CGI處理函數(shù);

S230:若處理函數(shù)信息表中存在與CGI請求的請求名稱對應(yīng)的CGI處理函數(shù),則根據(jù)CGI處理函數(shù)從內(nèi)存地址調(diào)取CGI處理函數(shù);具體根據(jù)CGI處理函數(shù)的函數(shù)名稱從分配的內(nèi)存地址讀取CGI處理函數(shù)的具體內(nèi)容,完成調(diào)取工作?;蛘?,

S240:若處理函數(shù)信息表中不存在與請求名稱對應(yīng)的CGI處理函數(shù),則向客戶端瀏覽器發(fā)送響應(yīng)失敗消息。該響應(yīng)失敗消息(如:沒有發(fā)現(xiàn)與請求對應(yīng)的CGI處理函數(shù))會封裝在響應(yīng)報(bào)文中發(fā)送給客戶端瀏覽器,具體可封裝在響應(yīng)報(bào)文的起始行中。

通過提取該請求名稱,根據(jù)請求名稱與CGI處理函數(shù)的對應(yīng)關(guān)系,即可從處理函數(shù)信息表中查詢到與該請求名稱對應(yīng)的CGI處理函數(shù),并使用編譯器分配CGI處理函數(shù)的內(nèi)存地址,從而使得HTTP服務(wù)器可直接從內(nèi)存中調(diào)用CGI處理函數(shù)處理CGI請求,不需要另外啟動進(jìn)程,向HTTP服務(wù)器之外的CGI腳本程序發(fā)送CGI請求進(jìn)行處理,因此,減少了嵌入式設(shè)備中硬件資源的消耗,尤其是接收到多個(gè)CGI請求時(shí),也只需要HTTP服務(wù)器啟動一個(gè)進(jìn)程處理即可。

S150:使用調(diào)取的CGI處理函數(shù)處理CGI請求,得到與CGI請求對應(yīng)的響應(yīng)結(jié)果。

S160:將響應(yīng)結(jié)果發(fā)送至客戶端瀏覽器。

通過使用調(diào)取的CGI處理函數(shù)處理該CGI請求,得到并向客戶端瀏覽器發(fā)送與CGI請求對應(yīng)的響應(yīng)結(jié)果,只會占用一個(gè)進(jìn)程,而非另外啟動專門的進(jìn)程,將CGI請求發(fā)送至CGI腳本程序進(jìn)行處理,從而能夠節(jié)約HTTP服務(wù)器所在嵌入式設(shè)備的硬件資源(如CPU和內(nèi)存等)。

本發(fā)明提供的HTTP服務(wù)器中CGI請求的處理方法,首先,HTTP服務(wù)器預(yù)生成處理函數(shù)信息表,該處理函數(shù)信息表預(yù)存儲CGI請求的請求名稱與CGI處理函數(shù)的對應(yīng)關(guān)系;然后,HTTP服務(wù)器在確定接收的HTTP請求是CGI請求時(shí),將根據(jù)CGI請求的請求名稱查詢上述處理函數(shù)信息表,從處理函數(shù)信息表中確定與請求名稱對應(yīng)的CGI處理函數(shù),以從HTTP服務(wù)器自身的內(nèi)存中調(diào)取CGI處理函數(shù);其次,HTTP服務(wù)器使用該CGI處理函數(shù)處理CGI請求,得到與CGI請求對應(yīng)的響應(yīng)結(jié)果;最后,HTTP服務(wù)器將該響應(yīng)結(jié)果返回客戶端瀏覽器。由于在本CGI請求的處理方案中,HTTP服務(wù)器中預(yù)先生成有處理函數(shù)信息表,通過查詢處理函數(shù)信息表,HTTP服務(wù)器即可直接從內(nèi)存中調(diào)用CGI處理函數(shù)處理CGI請求。相對于背景技術(shù)中提到的需要調(diào)用專門的CGI腳本程序處理CGI請求的處理方式,本方案只需要HTTP服務(wù)器啟動一個(gè)處理進(jìn)程即可,即使是在同一時(shí)間有多個(gè)CGI請求需要處理,HTTP服務(wù)器也只需要啟動一個(gè)進(jìn)程,在HTTP服務(wù)器內(nèi)部調(diào)用CGI處理函數(shù)進(jìn)行處理。HTTP服務(wù)器不需要另外啟動專門的CGI請求的處理進(jìn)程,從而減少了進(jìn)程的啟動運(yùn)行對硬件資源的過多占用,進(jìn)一步避免進(jìn)程過多而導(dǎo)致嵌入式設(shè)備的系統(tǒng)卡頓,甚至系統(tǒng)崩潰,需要重啟的情況。

如圖5所示,圖3所示實(shí)施例中的步驟S150:使用調(diào)取的CGI處理函數(shù)處理CGI請求,得到與CGI請求對應(yīng)的響應(yīng)結(jié)果,包括以下步驟:

S310:根據(jù)所述CGI請求中的請求方法信息,確定所述CGI請求的請求方式;若所述CGI請求的請求方式是GET請求方式,則執(zhí)行下述步驟S320;若是POST方式,則執(zhí)行下述步驟S330。

CGI請求的請求方式主要包括GET、POST、PUT和DELETE四種方式,其中GET和POST請求方式應(yīng)用最為常見。CGI請求本質(zhì)是一種HTTP請求,如圖6所示,圖6是本發(fā)明實(shí)施例示出的一種HTTP請求的結(jié)構(gòu)示意圖。根據(jù)HTTP協(xié)議的規(guī)定,HTTP請求主要包括起始行、報(bào)文首部和報(bào)文實(shí)體三部分。起始行為HTTP報(bào)文的第一行,包括請求方法信息、請求的統(tǒng)一資源定位符和HTTP版本三部分。首部為報(bào)文的附加信息,以名/值對列表的方式存在,其包含報(bào)文內(nèi)容長度、Cookie內(nèi)容、使用的代理瀏覽器等信息。其中每一名/值對列表占用一行,并且在行尾有行結(jié)束符。實(shí)體部分為HTTP要傳輸?shù)膬?nèi)容,如需要提交的表單數(shù)據(jù)和需要上傳的文件等。其中,CGI的請求方式主要通過起始行中的請求方法確定。

S320:對所述CGI請求的URL信息進(jìn)行解析,得到表單數(shù)據(jù),使用所述CGI處理函數(shù)對所述表單數(shù)據(jù)進(jìn)行處理,得到相應(yīng)的響應(yīng)結(jié)果。

在GET請求方式中,表單數(shù)據(jù)存儲在URL信息中,因此通過對CGI請求的URL信息進(jìn)行解析,能夠得到表單數(shù)據(jù),通過使用CGI處理函數(shù)對該表單數(shù)據(jù)進(jìn)行處理得到相應(yīng)的響應(yīng)結(jié)果。避免了傳統(tǒng)方式中需要另外啟動進(jìn)程,由HTTP服務(wù)器之外的CGI腳本程序處理表單數(shù)據(jù)而帶來的硬件資源消耗的情況。

在得到與CGI請求對應(yīng)的響應(yīng)數(shù)據(jù)的響應(yīng)結(jié)果后,會將響應(yīng)數(shù)據(jù)封裝入響應(yīng)報(bào)文的實(shí)體中,并在響應(yīng)報(bào)文的起始行中添加對應(yīng)的響應(yīng)狀態(tài),例如:響應(yīng)成功;在未得到與CGI請求對應(yīng)的響應(yīng)數(shù)據(jù)或者沒有發(fā)現(xiàn)對應(yīng)的CGI處理函數(shù)時(shí),會在響應(yīng)報(bào)文的起始行中添加對應(yīng)的響應(yīng)狀態(tài),例如:沒有發(fā)現(xiàn)請求對應(yīng)的響應(yīng)結(jié)果。

或者,

S330:確定所述CGI請求中報(bào)文實(shí)體的實(shí)體類型,根據(jù)與所述實(shí)體類型對應(yīng)的解析方式對所述報(bào)文實(shí)體進(jìn)行解析,得到表單數(shù)據(jù),使用所述CGI處理函數(shù)對所述表單數(shù)據(jù)進(jìn)行處理,得到相應(yīng)的響應(yīng)結(jié)果。

在POST請求方式中,表單數(shù)據(jù)存儲在CGI請求的報(bào)文實(shí)體中,CGI請求中報(bào)文實(shí)體的實(shí)體類型存儲在CGI請求的報(bào)文首部中,以名-值對的形式存在,HTTP服務(wù)器首先接收CGI請求的起始行信息,根據(jù)起始行信息確定CGI請求的請求方式是POST請求方式,然后繼續(xù)接收CGI請求的報(bào)文首部部分,根據(jù)報(bào)文首部判斷報(bào)文實(shí)體的實(shí)體類型后繼續(xù)接收報(bào)文實(shí)體。實(shí)體類型主要包括Application類型和Multipart類型兩部分。在Application類型中,報(bào)文實(shí)體只有頁面表單的基本數(shù)據(jù),并沒有文件上傳,此時(shí),可直接采用與Application類型對應(yīng)的解析方式對報(bào)文實(shí)體進(jìn)行解析,得到表單數(shù)據(jù);若實(shí)體類型為Multipart類型,則表示報(bào)文實(shí)體中有多個(gè)被分隔符Boundary分隔開的表單數(shù)據(jù),可能存在上傳的文件;此時(shí),可采用與Multipart類型對應(yīng)的解析方式對報(bào)文實(shí)體進(jìn)行解析,根據(jù)分隔符Boundary,將報(bào)文實(shí)體進(jìn)行分割,得到表單數(shù)據(jù),例如:對報(bào)文實(shí)體進(jìn)行解碼,得到表單中每一項(xiàng)名稱與對應(yīng)值。其中,若有上傳的文件,則直接將該文件上傳至HTTP服務(wù)器中。

在使用CGI處理函數(shù)對表單數(shù)據(jù)進(jìn)行處理,得到與CGI請求對應(yīng)的響應(yīng)數(shù)據(jù)后,可將響應(yīng)數(shù)據(jù)封裝入響應(yīng)報(bào)文的實(shí)體中,并在響應(yīng)報(bào)文的起始行中添加對應(yīng)的響應(yīng)狀態(tài)(例如:響應(yīng)成功);在未得到與CGI請求對應(yīng)的響應(yīng)數(shù)據(jù)或者沒有發(fā)現(xiàn)對應(yīng)的CGI處理函數(shù)時(shí),會在響應(yīng)報(bào)文的起始行中添加對應(yīng)的響應(yīng)狀態(tài)(例如:沒有發(fā)現(xiàn)對應(yīng)的請求結(jié)果)。

另外,HTTP請求除了用于請求動態(tài)資源的CGI請求外,還包括靜態(tài)資源請求,為了獲得靜態(tài)資源,如圖7所示,圖3所示實(shí)施例中的HTTP服務(wù)器中CGI請求的處理方法還包括:

S410:若HTTP請求是靜態(tài)資源請求,則根據(jù)靜態(tài)資源請求的URL信息中包含的目標(biāo)路徑,打開對應(yīng)的資源文件;

靜態(tài)資源包括HTML以及JS等源碼或者圖片、視頻等資源。HTTP服務(wù)器可通過HTTP請求的統(tǒng)一資源定位符URL信息確定其是否為靜態(tài)資源請求,通過URL信息中的目標(biāo)路徑,可直接打開對應(yīng)的資源文件。其中,若HTTP服務(wù)器打開資源文件失敗,則在向客戶端瀏覽器發(fā)送的響應(yīng)報(bào)文的起始行中添加響應(yīng)失敗的響應(yīng)結(jié)果,如在響應(yīng)報(bào)文中添加“沒有發(fā)現(xiàn)對應(yīng)的請求文件”的信息。

S420:若資源文件打開成功,則讀取資源文件的文件狀態(tài)信息和文件內(nèi)容;

其中,文件狀態(tài)信息包括文件大小信息、讀寫權(quán)限、上次修改時(shí)間等文件狀態(tài);HTTP服務(wù)器在獲取到文件大小信息時(shí),可判斷文件大小是否為0,若文件大小為0,則在向客戶端瀏覽器發(fā)送的響應(yīng)報(bào)文的起始行中添加響應(yīng)失敗的響應(yīng)結(jié)果。

S430:將文件狀態(tài)信息和文件內(nèi)容發(fā)送至客戶端瀏覽器。

發(fā)送至客戶端瀏覽器的文件狀態(tài)信息主要包括文件大小信息,其中在將文件狀態(tài)信息和文件內(nèi)容封裝入響應(yīng)報(bào)文發(fā)送至客戶端瀏覽器時(shí),首先發(fā)送響應(yīng)報(bào)文的起始行和首部,其中,起始行指出響應(yīng)結(jié)果:請求成功。資源文件的首部包括報(bào)文實(shí)體的類型、報(bào)文實(shí)體長度等信息。而報(bào)文實(shí)體包括文件內(nèi)容。

作為本發(fā)明的另一種實(shí)施例,本方案還可以接收系統(tǒng)進(jìn)程間通信請求;如圖8所示,圖8所示實(shí)施例除了圖3所示方法外,還包括:

S510:獲取HTTP服務(wù)器所在系統(tǒng)中其他應(yīng)用程序發(fā)送的系統(tǒng)進(jìn)程間通信請求。

S520:根據(jù)系統(tǒng)進(jìn)程間通信請求的身份認(rèn)證標(biāo)識ID號與通信請求處理函數(shù)的對應(yīng)關(guān)系,從內(nèi)存中調(diào)取與系統(tǒng)進(jìn)程間通信請求對應(yīng)的通信請求處理函數(shù)。

系統(tǒng)進(jìn)程間通信請求可通過ID號進(jìn)行區(qū)分,在HTTP服務(wù)器中能夠預(yù)生成包含各個(gè)系統(tǒng)進(jìn)程間通信請求的ID號與通信請求處理函數(shù)的對應(yīng)關(guān)系的關(guān)系信息表,根據(jù)該ID號與相應(yīng)通信請求處理函數(shù)的對應(yīng)關(guān)系,即可查詢到與該系統(tǒng)進(jìn)程間通信請求對應(yīng)的通信請求處理函數(shù),從而使得HTTP服務(wù)器可直接從內(nèi)存中直接調(diào)用不同類型的通信請求處理函數(shù)處理各種系統(tǒng)進(jìn)程間通信請求。如:HTTP服務(wù)器接收Upgrade進(jìn)程發(fā)送的msg信息,根據(jù)該msg信息的id調(diào)用對應(yīng)的處理函數(shù)進(jìn)行處理,從而通過該msg信息確知系統(tǒng)升級成功。

S530:使用調(diào)取的通信請求處理函數(shù)對系統(tǒng)進(jìn)程間通信請求進(jìn)行處理,得到與系統(tǒng)進(jìn)程間通信請求對應(yīng)的響應(yīng)結(jié)果。

通過在HTTP服務(wù)器中添加處理系統(tǒng)進(jìn)程間通信請求的功能,從而作為統(tǒng)一的處理平臺集中處理系統(tǒng)中其他應(yīng)用程序發(fā)送的各種不同類型的系統(tǒng)進(jìn)程間通信請求。

并且由于嵌入式設(shè)備中,HTTP服務(wù)器能夠作為統(tǒng)一的處理平臺集中處理各種不同類型的系統(tǒng)進(jìn)程間通信請求,因此各種不同類型的系統(tǒng)進(jìn)程間通信請求在HTTP服務(wù)器的處理進(jìn)程中可由HTTP服務(wù)器調(diào)用通信請求處理函數(shù)直接進(jìn)行處理,不會占用過多進(jìn)程,減少了嵌入式設(shè)備中硬件資源(如內(nèi)存和CPU)的消耗。

另外,本發(fā)明實(shí)施例提供的方法中,HTTP服務(wù)器也可對CGI請求進(jìn)行用戶認(rèn)證,具體可在查詢處理函數(shù)信息表之前進(jìn)行認(rèn)證。

基于同一發(fā)明構(gòu)思,本申請實(shí)施例還提供了HTTP服務(wù)器中CGI請求的處理系統(tǒng),由于系統(tǒng)對應(yīng)的方法是本申請實(shí)施例中的HTTP服務(wù)器中CGI請求的處理方法,并且該系統(tǒng)解決問題的原理與方法相似,因此該系統(tǒng)的實(shí)施可以參見方法的實(shí)施,重復(fù)之處不再贅述。

請參考圖9,圖9為本發(fā)明實(shí)施例提供的一種HTTP服務(wù)器中CGI請求的處理系統(tǒng)的結(jié)構(gòu)示意圖,該CGI請求的處理系統(tǒng)用于HTTP服務(wù)器,所述系統(tǒng)包括:

生成模塊901,用于在所述HTTP服務(wù)器中預(yù)生成處理函數(shù)信息表,其中,所述處理函數(shù)信息表中包含有CGI請求的請求名稱與CGI處理函數(shù)的對應(yīng)關(guān)系;

接收模塊902,用于接收客戶端瀏覽器發(fā)送的HTTP請求;

判斷模塊903,用于判斷所述HTTP請求是否為CGI請求;

調(diào)取模塊904,用于若所述判斷模塊903判定所述HTTP請求為CGI請求時(shí),提取所述CGI請求的請求名稱,根據(jù)所述處理函數(shù)信息表中請求名稱與CGI處理函數(shù)的對應(yīng)關(guān)系,調(diào)取與所述CGI請求的請求名稱對應(yīng)的CGI處理函數(shù);

處理模塊905,用于使用所述調(diào)取模塊904調(diào)取的CGI處理函數(shù)處理所述CGI請求,得到與所述CGI請求對應(yīng)的響應(yīng)結(jié)果;

發(fā)送模塊906,用于將所述響應(yīng)結(jié)果發(fā)送至所述客戶端瀏覽器。

圖9所示的調(diào)取模塊904主要根據(jù)CGI請求的請求名稱進(jìn)行調(diào)取,如圖10所示,調(diào)取模塊904包括:

名稱提取子模塊9041,用于從所述CGI請求的統(tǒng)一資源定位符URL信息中提取所述CGI請求的請求名稱;

函數(shù)判斷子模塊9042,用于判斷所述處理函數(shù)信息表中是否存在與所述請求名稱對應(yīng)的CGI處理函數(shù);

函數(shù)調(diào)取子模塊9043,用于若所述函數(shù)判斷子模塊9042判定處理函數(shù)信息表中存在與所述請求名稱對應(yīng)的CGI處理函數(shù)時(shí),從內(nèi)存中調(diào)取所述CGI處理函數(shù);

所述發(fā)送模塊906還用于若所述函數(shù)判斷子模塊9042判定處理函數(shù)信息表中不存在與所述請求名稱對應(yīng)的CGI處理函數(shù)時(shí),向所述客戶端瀏覽器發(fā)送響應(yīng)失敗消息。

CGI請求中可能包括大量的表單數(shù)據(jù),為了對表單數(shù)據(jù)進(jìn)行處理,如圖11所示,處理模塊905包括:

請求方式確定子模塊9051,用于根據(jù)所述CGI請求中的請求方法信息,確定所述CGI請求的請求方式;

信息解析子模塊9052,用于若所述CGI請求的請求方式是GET請求方式時(shí),對所述CGI請求的URL信息進(jìn)行解析,得到表單數(shù)據(jù);

第一表單數(shù)據(jù)處理子模塊9053,用于使用所述CGI處理函數(shù)對所述表單數(shù)據(jù)進(jìn)行處理,得到相應(yīng)的響應(yīng)結(jié)果;

或者,

實(shí)體類型確定子模塊9054,用于若所述CGI請求的請求方式是POST請求方式時(shí),確定所述CGI請求中報(bào)文實(shí)體的實(shí)體類型;

實(shí)體解析子模塊9055,用于根據(jù)與所述實(shí)體類型對應(yīng)的解析方式對所述報(bào)文實(shí)體進(jìn)行解析,得到表單數(shù)據(jù);

第二表單數(shù)據(jù)處理子模塊9056,用于使用所述CGI處理函數(shù)對所述表單數(shù)據(jù)進(jìn)行處理,得到相應(yīng)的響應(yīng)結(jié)果。

另外,本HTTP服務(wù)器還可以處理靜態(tài)資源請求,如圖12所示,CGI請求處理系統(tǒng)除了圖9所示的模塊外,還包括:

開啟模塊907,若判斷模塊903判定HTTP請求是靜態(tài)資源請求,則根據(jù)所述靜態(tài)資源請求的URL信息中包含的目標(biāo)路徑,打開對應(yīng)的資源文件;

讀取模塊908,用于若所述資源文件打開成功時(shí),讀取所述資源文件的文件狀態(tài)信息和文件內(nèi)容;

所述發(fā)送模塊906,還用于將所述文件狀態(tài)信息和文件內(nèi)容發(fā)送至所述客戶端瀏覽器。

優(yōu)選地,所述接收模塊902,還用于獲取所述HTTP服務(wù)器所在系統(tǒng)中其他應(yīng)用程序發(fā)送的系統(tǒng)進(jìn)程間通信請求;

所述調(diào)取模塊904,還用于根據(jù)所述系統(tǒng)進(jìn)程間通信請求的身份認(rèn)證標(biāo)識ID號與通信請求處理函數(shù)的對應(yīng)關(guān)系,調(diào)取與所述系統(tǒng)進(jìn)程間通信請求對應(yīng)的處理函數(shù);

所述處理模塊905,還用于使用所述處理函數(shù)對所述系統(tǒng)進(jìn)程間通信請求進(jìn)行處理,得到與所述系統(tǒng)進(jìn)程間通信請求對應(yīng)的響應(yīng)結(jié)果;

所述發(fā)送模塊906,還用于將所述響應(yīng)結(jié)果發(fā)送至所述其他應(yīng)用程序。

本發(fā)明上述實(shí)施例提供的HTTP服務(wù)器中CGI請求的處理方案,首先,HTTP服務(wù)器預(yù)生成處理函數(shù)信息表,該處理函數(shù)信息表預(yù)存儲CGI請求的請求名稱與CGI處理函數(shù)的對應(yīng)關(guān)系;然后,HTTP服務(wù)器在確定接收的HTTP請求是CGI請求時(shí),將根據(jù)CGI請求的請求名稱查詢上述處理函數(shù)信息表,從處理函數(shù)信息表中確定與請求名稱對應(yīng)的CGI處理函數(shù),以從內(nèi)存中調(diào)取CGI處理函數(shù);其次,HTTP服務(wù)器使用該CGI處理函數(shù)處理CGI請求,得到與CGI請求對應(yīng)的響應(yīng)結(jié)果;最后,HTTP服務(wù)器將該響應(yīng)結(jié)果返回客戶端瀏覽器。由于在本CGI請求的處理方案中,HTTP服務(wù)器中預(yù)先生成有處理函數(shù)信息表,通過查詢處理函數(shù)信息表,HTTP服務(wù)器即可直接從內(nèi)存中調(diào)用CGI處理函數(shù)處理CGI請求。相對于背景技術(shù)中提到的需要調(diào)用專門的CGI腳本程序處理CGI請求的處理方式,本方案不需要另外啟動專門的CGI請求的處理進(jìn)程,從而減少了進(jìn)程的啟動運(yùn)行對硬件資源的過多占用,進(jìn)一步避免進(jìn)程過多而導(dǎo)致嵌入式設(shè)備的系統(tǒng)崩潰,需要重啟的情況。

本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)當(dāng)明白,本發(fā)明的實(shí)施例可提供為方法、裝置或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例,完全軟件實(shí)施例或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包括有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲介質(zhì)(包括但不限于硬盤存儲器、CD-ROM、光學(xué)存儲器等)上實(shí)時(shí)的計(jì)算機(jī)程序產(chǎn)品的形式。

本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/方框圖中的流程和/或方框的結(jié)合。可提供這些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或奇特可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方塊或多個(gè)方塊中指定的功能的裝置。

這些計(jì)算機(jī)程序指令也可以存儲在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)課讀存儲器中,使得存儲在該計(jì)算機(jī)課讀存儲器中是指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方塊或多個(gè)方塊中指定的功能。

這些計(jì)算機(jī)程序指令也可以裝置到計(jì)算機(jī)或其他科編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方塊或多個(gè)方塊中指定的功能的步驟。

本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,各個(gè)實(shí)施例之間相同相似的部分互相參見即可,每個(gè)實(shí)施例重點(diǎn)說明的都是與其它實(shí)施例的不同之處。

以上的本發(fā)明實(shí)施方式,并不構(gòu)成對本發(fā)明保護(hù)范圍的限定。任何在本發(fā)明的精神和原則之內(nèi)所作的修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1