两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

Http報文處理方法及系統(tǒng)、http客戶端及服務(wù)器的制造方法

文檔序號:10626923閱讀:611來源:國知局
Http報文處理方法及系統(tǒng)、http客戶端及服務(wù)器的制造方法
【專利摘要】一種HTTP報文處理方法及系統(tǒng)、HTTP客戶端及服務(wù)器;該方法包括:HTTP客戶端構(gòu)造包含用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段的HTTP請求報文,并發(fā)送該HTTP請求報文;在與該HTTP請求報文相對應(yīng)的長連接斷開前,HTTP客戶端重復(fù)執(zhí)行如下處理:通過所述長連接接收HTTP響應(yīng)報文;接收到包含用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段的HTTP請求報文后,在與該HTTP請求報文相對應(yīng)的長連接斷開前,HTTP服務(wù)器重復(fù)執(zhí)行如下處理:當(dāng)前有數(shù)據(jù)需要推送時,在HTTP響應(yīng)報文中標(biāo)識該數(shù)據(jù)的長度,并將該數(shù)據(jù)包含在該HTTP響應(yīng)報文中,通過所述長連接發(fā)送該HTTP響應(yīng)報文。
【專利說明】
HTTP報文處理方法及系統(tǒng)、HTTP客戶端及服務(wù)器
技術(shù)領(lǐng)域
[0001]本申請涉及通信領(lǐng)域,尤其涉及一種HTTP (HyperText Transfer Protocol,超文本傳送協(xié)議)報文處理方法及系統(tǒng)、HTTP客戶端及服務(wù)器。
【背景技術(shù)】
[0002]HTTP是基于TCP/IP (Transfer Control Protocol/Internet Protocol,傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議)之上的一個應(yīng)用層協(xié)議。該協(xié)議是一種典型的請求/響應(yīng)(Request/Response)協(xié)議,其特點是無狀態(tài)且需要HTTP客戶端發(fā)起請求(Request),HTTP服務(wù)器才能進(jìn)行響應(yīng)(Response),這意味著HTTP服務(wù)器無法主動向HTTP客戶端推送信息。
[0003]圖1是現(xiàn)有技術(shù)中標(biāo)準(zhǔn)的HTTP報文交互流程示意圖,如圖1所示,該報文交互流程包括:
[0004]步驟S100 =HTTP客戶端(簡稱客戶端)向HTTP服務(wù)器(簡稱服務(wù)器)發(fā)送第I個HTTP請求報文(簡稱請求報文,記作Requestl)。
[0005]步驟S102:接收到Requestl后,服務(wù)器向客戶端返回第I個HTTP響應(yīng)報文(簡稱響應(yīng)報文,記作Responsel)。
[0006]步驟S104:接收到Responsel后,客戶端向服務(wù)器發(fā)送第2個請求報文(記作Request2)。
[0007]步驟S106:接收到Request2后,服務(wù)器向客戶端返回第2個響應(yīng)報文。
[0008]之后可以重復(fù)執(zhí)行上述步驟。
[0009]從以上流程可知,服務(wù)器發(fā)送的響應(yīng)報文與客戶端發(fā)送的請求報文一一對應(yīng)。即,在沒有接收到客戶端發(fā)送的請求報文之前,服務(wù)器無法向客戶端發(fā)送響應(yīng)報文,且接收到一個請求報文,服務(wù)器只能發(fā)送一個響應(yīng)報文。
[0010]目前有很多應(yīng)用需要HTTP服務(wù)器提供服務(wù)端推送服務(wù),例如:監(jiān)控系統(tǒng)、即時報價系統(tǒng)、游戲、協(xié)同文檔、進(jìn)度條等應(yīng)用,都需要HTTP服務(wù)器能實時地將更新的信息推送到HTTP客戶端,而無須HTTP客戶端發(fā)出請求。
[0011]為了滿足對服務(wù)端推送服務(wù)的應(yīng)用需求,現(xiàn)有技術(shù)中較為流行的解決方案為Comet (彗星)技術(shù),Comet技術(shù)包括兩種實現(xiàn)方式:長輪詢(long-polling)方式和基于iframe的流方式。
[0012]圖2是現(xiàn)有技術(shù)中采用長輪詢方式實現(xiàn)Comet技術(shù)的方法的方法流程圖。
[0013]長輪詢(long-polling)與輪詢之間的主要區(qū)別在于從HTTP服務(wù)器接收到HTTP請求報文到發(fā)送HTTP響應(yīng)報文之間的時間間隔。長輪詢通常將連接保持一段較長的時間,通常是數(shù)秒鐘,也可能是一分鐘甚至更長,當(dāng)HTTP服務(wù)器上發(fā)生某個事件時,HTTP響應(yīng)報文被發(fā)送,相應(yīng)的連接隨即被斷開,長輪詢立即重新開始。
[0014]如圖2所示,該方法包括:
[0015]步驟S200 =HTTP客戶端(簡稱客戶端)打開一個長連接,并向HTTP服務(wù)器(簡稱服務(wù)器)發(fā)送HTTP請求報文(簡稱請求報文)。
[0016]步驟S202:接收到客戶端發(fā)送的請求報文后,服務(wù)器阻塞該請求報文,直到有數(shù)據(jù)需要發(fā)送或超時(由服務(wù)器設(shè)定連接超時時間)才向客戶端返回HTTP響應(yīng)報文(簡稱響應(yīng)報文),并斷開對應(yīng)的長連接;
[0017]上述響應(yīng)報文中可以包含需要發(fā)送給客戶端的數(shù)據(jù)。
[0018]步驟S204:接收到響應(yīng)報文后,客戶端中的響應(yīng)處理函數(shù)會對響應(yīng)報文中包含的數(shù)據(jù)進(jìn)行處理,處理完成后重新打開一個長連接,并向服務(wù)器發(fā)送請求報文。
[0019]步驟S206:在步驟S202之后,如果有新的數(shù)據(jù)產(chǎn)生,服務(wù)器保存該數(shù)據(jù),直到再次接收到客戶端發(fā)送的請求報文后,通過向客戶端發(fā)送響應(yīng)報文將該數(shù)據(jù)返回給客戶端。
[0020]圖3是現(xiàn)有技術(shù)中采用基于iframe的流方式實現(xiàn)Comet技術(shù)的方法的方法流程圖。
[0021]基于iframe的流方式需要使用HTTP長連接,實際實現(xiàn)時在瀏覽器頁面中嵌入一個iframe元素(內(nèi)聯(lián)框架),然后使用這個iframe請求一個特定的URL (Uniform ResourceLocator,統(tǒng)一資源定位符),并通過這個頁面的加載不斷的從服務(wù)器抓回數(shù)據(jù),從服務(wù)端抓回的數(shù)據(jù)大多是對頁面當(dāng)前JS(JavaScript)函數(shù)的引用和操作。Iframe中HTTP頭的Transfer-Encoding (傳輸編碼)屬性為chunked (分塊),這意味著服務(wù)端并不知道要發(fā)送給客戶端多少數(shù)據(jù),也就隱式意味著該連接的長度為無限。
[0022]如圖3所示,該方法包括:
[0023]步驟S300 =HTTP客戶端(簡稱客戶端)打開一個長連接,并向HTTP服務(wù)器(簡稱服務(wù)器)發(fā)送HTTP請求報文(簡稱請求報文)。
[0024]步驟S302:當(dāng)有數(shù)據(jù)產(chǎn)生時,服務(wù)器使用HTTP 1.1規(guī)范中規(guī)定的chunked (分塊)編碼方式回傳第一部分?jǐn)?shù)據(jù);
[0025]通常,一個chunked編碼段放在一個TCP包中發(fā)送。
[0026]步驟S304:當(dāng)再有數(shù)據(jù)產(chǎn)生時,服務(wù)器使用chunked編碼方式回傳第二部分?jǐn)?shù)據(jù)。
[0027]服務(wù)器重復(fù)上述步驟,直至長連接超時斷開,或者客戶端或服務(wù)器主動斷開長連接。
[0028]圖4是現(xiàn)有技術(shù)中基于HTTP 2.0的服務(wù)端推送方法的方法流程圖。如圖4所示,該方法包括:
[0029]步驟S400 =HTTP 2.0客戶端(簡稱客戶端)打開一個連接,并向HTTP2.0服務(wù)器(簡稱服務(wù)器)發(fā)送作為請求報文的HEADERS (報頭)幀,以創(chuàng)建一個新的流(Stream);
[0030]上述HEADERS巾貞中包含流的流標(biāo)識符stream_id,例如:stream_id = I ;以下將stream」d = I 的流記作 Stream1;
[0031]上述HEADERS巾貞還包含method (方法)字段:“:method = GET”,用于標(biāo)識該巾貞的具體請求類型。
[0032]步驟S402:接收到客戶端發(fā)送的HEADERS幀后,服務(wù)器在Stream1I向客戶端發(fā)送作為請求報文的PUSH_PR0MISE (推送承諾)幀;
[0033]上述PUSH_PR0MISE 巾貞中包含 Promi sed-Stream-1D 標(biāo)記,例如:
[0034]“ Promised-Stream-1D = 2,,;
[0035]該標(biāo)記用于標(biāo)識服務(wù)器準(zhǔn)備使用的流的流標(biāo)識符stream_id = 2,以下將stream_id = 2的流記作Stream2;
[0036]上述PUSH_PR0MISE幀還包含method (方法)字段:“:method = GET”,用于標(biāo)識該幀的具體請求類型。
[0037]步驟S404:服務(wù)器在Stream2上向客戶端發(fā)送作為響應(yīng)報文的HEADERS幀;
[0038]上述HEADERS巾貞中包含狀態(tài)(status)字段,例如:“:status = 200”,用于標(biāo)識響應(yīng)狀態(tài);
[0039]此外,HEADERS巾貞中還包含內(nèi)容類型(content-type)字段,例如:“content_type=image/png”,用于標(biāo)識后續(xù)幀中攜帶的數(shù)據(jù)的數(shù)據(jù)類型。
[0040]此外,HEADERS巾貞中還包含內(nèi)容長度(content-length)字段,例如:“content-length = 123”,用于標(biāo)識后續(xù)巾貞中攜帶的數(shù)據(jù)的長度。
[0041]步驟S406:服務(wù)器在Stream2I向客戶端發(fā)送DATA(數(shù)據(jù))幀,用于向客戶端傳輸數(shù)據(jù),如果數(shù)據(jù)傳輸完畢,則用END_STREAM(流結(jié)束)標(biāo)記關(guān)閉Stream2。
[0042]步驟S408:服務(wù)器在Stream1上向客戶端發(fā)送作為響應(yīng)報文的HEADERS幀;
[0043]上述HEADERS巾貞中包含狀態(tài)(status)字段,例如:“:status = 200”,用于標(biāo)識響應(yīng)狀態(tài);
[0044]此外,HEADERS巾貞中還包含內(nèi)容類型(content-type)字段,例如:“content_type=text/html”,用于標(biāo)識后續(xù)幀中攜帶的數(shù)據(jù)的數(shù)據(jù)類型。
[0045]此外,HEADERS巾貞中還包含內(nèi)容長度(content-length)字段,例如:“content-length = 33”,用于標(biāo)識后續(xù)巾貞中攜帶的數(shù)據(jù)的長度。
[0046]步驟S406:服務(wù)器在Stream1I向客戶端發(fā)送DATA(數(shù)據(jù))幀,數(shù)據(jù)傳輸完畢后用END_STREAM 標(biāo)記關(guān)閉 Stream10
[0047]綜上所述,對于comet技術(shù),無論是采用長輪詢方式實現(xiàn),還是采用基于iframe的流方式實現(xiàn),其邏輯過程仍然是客戶端請求、服務(wù)端響應(yīng)的拉(pull)模式,非真正意義上的服務(wù)端推(push)模式,僅僅是為了用戶感受模擬服務(wù)端推送的實現(xiàn)方案。
[0048]此外,采用長輪詢方式實現(xiàn)comet技術(shù)采用的是延時的服務(wù)端響應(yīng),即,服務(wù)器接收到客戶端主動發(fā)起的請求后,以非常慢的響應(yīng)方式返回響應(yīng),這樣,服務(wù)器就可以使用同一個連接把在這個期間內(nèi)需要更新的數(shù)據(jù)主動發(fā)送給客戶端,從而讓客戶端以為數(shù)據(jù)是服務(wù)器主動推送過來的。也就是說,該方式本質(zhì)上仍然是利用了 HTTP的請求/響應(yīng)的拉模式,且客戶端在每次接收和處理數(shù)據(jù)后都需要重新發(fā)起新的連接請求,造成了網(wǎng)絡(luò)資源和客戶端和服務(wù)器處理資源的浪費。
[0049]而采用基于iframe的流方式實現(xiàn)comet技術(shù),本質(zhì)上是采用了 HTTP 1.1規(guī)范中規(guī)定的chunked編碼傳輸模式。服務(wù)器每次產(chǎn)生的數(shù)據(jù)均以chunked編碼方式封裝,通過一個TCP包發(fā)送,從TCP的層面上看是一個客戶端請求包后續(xù)帶來了若干個服務(wù)器的響應(yīng)包,但從應(yīng)用層上看,仍然是一個HTTP請求報文對應(yīng)了一個HTTP響應(yīng)報文,只不過這個HTTP響應(yīng)報文被分裝到了多個TCP包中發(fā)送,仍然不是真正的服務(wù)端推模式;而且采用基于iframe的流方式時需要使用iframe標(biāo)記,即需要瀏覽器實現(xiàn)內(nèi)聯(lián)框架,某些瀏覽器,例如IE(Internet Explorer,互聯(lián)網(wǎng)瀏覽器)對內(nèi)聯(lián)框架沒有很好地支持。
[0050]采用HTTP 2.0的服務(wù)端推送方法需要使用流(stream),并且在發(fā)起服務(wù)端推送時需要發(fā)起新的流。因此對于僅支持HTTP 1.1的客戶端、服務(wù)器程序而言,需要進(jìn)行大規(guī)模升級才能實現(xiàn)服務(wù)端推送的功能,成本很高。

【發(fā)明內(nèi)容】

[0051]本申請的目的在于提供一種HTTP報文處理方法及系統(tǒng)、HTTP客戶端及服務(wù)器。
[0052]為了達(dá)到上述目的,本申請公開了一種HTTP報文處理方法,該方法包括:
[0053]接收到包含用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段的HTTP請求報文后,在與該HTTP請求報文相對應(yīng)的長連接斷開前,HTTP服務(wù)器重復(fù)執(zhí)行如下處理:
[0054]當(dāng)前有數(shù)據(jù)需要推送時,在HTTP響應(yīng)報文中標(biāo)識該數(shù)據(jù)的長度,并將該數(shù)據(jù)包含在該HTTP響應(yīng)報文中,通過所述長連接發(fā)送該HTTP響應(yīng)報文。
[0055]此外,所述用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段中包含:用于標(biāo)識支持服務(wù)端推模式的expectat1n-extens1n值。
[0056]此外,當(dāng)前有數(shù)據(jù)需要推送時,在包含所述數(shù)據(jù)的HTTP響應(yīng)報文中設(shè)置如下狀態(tài)碼:
[0057]用于標(biāo)識有后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼;或
[0058]用于標(biāo)識無后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼。
[0059]此外,接收到所述HTTP請求報文后,在與該HTTP請求報文相對應(yīng)的長連接斷開前,還包含如下步驟:
[0060]HTTP服務(wù)器獲知無后續(xù)數(shù)據(jù)需要推送時,使用所述長連接發(fā)送HTTP響應(yīng)報文,在該HTTP響應(yīng)報文中設(shè)置如下狀態(tài)碼:用于標(biāo)識無后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼。
[0061]此外,所述用于標(biāo)識有后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼為dOOcontinue。
[0062]本申請還公開了一種HTTP報文處理方法,該方法包括:
[0063]HTTP客戶端構(gòu)造包含用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段的HTTP請求報文,并發(fā)送該HTTP請求報文;
[0064]在與該HTTP請求報文相對應(yīng)的長連接斷開前,HTTP客戶端重復(fù)執(zhí)行如下處理:
[0065]通過所述長連接接收HTTP響應(yīng)報文。
[0066]此外,所述用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段中包含:用于標(biāo)識支持服務(wù)端推模式的expectat1n-extens1n值。
[0067]此外,通過所述長連接接收到HTTP響應(yīng)報文后,HTTP客戶端還執(zhí)行如下處理:讀取并判斷所述HTTP響應(yīng)報文中包含的狀態(tài)碼:
[0068]如果所述狀態(tài)碼是用于標(biāo)識有后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼,則保持所述長連接的連接狀態(tài);和/或
[0069]如果所述狀態(tài)碼是用于標(biāo)識無后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼,則斷開所述長連接。
[0070]此外,所述用于標(biāo)識有后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼為:100COntinue。
[0071]本申請還公開了一種HTTP服務(wù)器,該服務(wù)器中包括:
[0072]服務(wù)器端接收模塊,用于接收包含用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段的HTTP請求報文;
[0073]服務(wù)器端發(fā)送模塊,用于在與所述HTTP請求報文相對應(yīng)的長連接斷開前,重復(fù)執(zhí)行如下處理:當(dāng)前有數(shù)據(jù)需要推送時,在HTTP響應(yīng)報文中標(biāo)識該數(shù)據(jù)的長度,并將該數(shù)據(jù)包含在該HTTP響應(yīng)報文中,通過所述長連接發(fā)送該HTTP響應(yīng)報文。
[0074]此外,所述用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段中包含:用于標(biāo)識支持服務(wù)端推模式的expectat1n-extens1n值。
[0075]此外,當(dāng)前有數(shù)據(jù)需要推送時,所述服務(wù)器端發(fā)送模塊在包含所述數(shù)據(jù)的HTTP響應(yīng)報文中設(shè)置如下狀態(tài)碼:
[0076]用于標(biāo)識有后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼;或
[0077]用于標(biāo)識無后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼。
[0078]此外,接收到所述HTTP請求報文后,在與該HTTP請求報文相對應(yīng)的長連接斷開前,所述服務(wù)器端發(fā)送模塊還用于:獲知無后續(xù)數(shù)據(jù)需要推送時,使用所述長連接發(fā)送HTTP響應(yīng)報文,在該HTTP響應(yīng)報文中設(shè)置如下狀態(tài)碼:用于標(biāo)識無后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼。
[0079]此外,所述用于標(biāo)識有后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼為:100COntinue。
[0080]本申請還公開了一種HTTP客戶端,該客戶端中包括:
[0081]客戶端發(fā)送模塊,用于構(gòu)造包含用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段的HTTP請求報文,并發(fā)送該HTTP請求報文;
[0082]客戶端接收模塊,用于在與該HTTP請求報文相對應(yīng)的長連接斷開前,重復(fù)執(zhí)行如下處理:通過所述長連接接收HTTP響應(yīng)報文。
[0083]此外,所述用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段中包含:用于標(biāo)識支持服務(wù)端推模式的expectat1n-extens1n值。
[0084]此外,通過所述長連接接收到HTTP響應(yīng)報文后,所述客戶端接收模塊還執(zhí)行如下處理:讀取并判斷所述HTTP響應(yīng)報文中包含的狀態(tài)碼:
[0085]如果所述狀態(tài)碼是用于標(biāo)識有后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼,則保持所述長連接的連接狀態(tài);和/或
[0086]如果所述狀態(tài)碼是用于標(biāo)識無后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼,則斷開所述長連接。
[0087]此外,所述用于標(biāo)識有后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼為:100COntinue。
[0088]本申請還公開了一種HTTP報文處理系統(tǒng),該系統(tǒng)中包括:HTTP服務(wù)器,HTTP客戶端;其中:
[0089]HTTP服務(wù)器中包括:
[0090]服務(wù)器端接收模塊,用于接收包含用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段的HTTP請求報文;
[0091]服務(wù)器端發(fā)送模塊,用于在與所述HTTP請求報文相對應(yīng)的長連接斷開前,重復(fù)執(zhí)行如下處理:當(dāng)前有數(shù)據(jù)需要推送時,在HTTP響應(yīng)報文中標(biāo)識該數(shù)據(jù)的長度,并將該數(shù)據(jù)包含在該HTTP響應(yīng)報文中,通過所述長連接發(fā)送該HTTP響應(yīng)報文。
[0092]HTTP客戶端中包括:
[0093]客戶端發(fā)送模塊,用于構(gòu)造包含用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段的HTTP請求報文,并發(fā)送該HTTP請求報文;
[0094]客戶端接收模塊,用于在與該HTTP請求報文相對應(yīng)的長連接斷開前,重復(fù)執(zhí)行如下處理:通過所述長連接接收HTTP響應(yīng)報文。
[0095]與現(xiàn)有技術(shù)相比,本申請可以獲得包括以下技術(shù)效果:
[0096]1、無需客戶端發(fā)起輪詢,在客戶端沒有發(fā)送請求報文的情況下即可發(fā)送響應(yīng)報文,實現(xiàn)服務(wù)端推送,減少了請求報文的數(shù)量,且減少了客戶端和服務(wù)器之間重新建立連接的次數(shù),即節(jié)省了網(wǎng)絡(luò)資源以及客戶端及服務(wù)器的處理資源;
[0097]2、無需依賴瀏覽器對內(nèi)聯(lián)框架(iframe)的支持,在協(xié)議層面實現(xiàn)了服務(wù)端推送,擴大了服務(wù)端推送的應(yīng)用范圍;
[0098]3、無需對客戶端和服務(wù)器進(jìn)行大規(guī)模升級,將協(xié)議從HTTP 1.1升級到HTTP 2.0,降低了服務(wù)端推送的實施成本,且在實現(xiàn)服務(wù)端推送時無需建立新的HTTP流,節(jié)省了客戶端和服務(wù)器的處理資源;
[0099]4、無需解決請求/響應(yīng)報文的同步問題即可實現(xiàn)應(yīng)用層廣播,降低了應(yīng)用層廣播的實施難度,擴大了應(yīng)用層廣播的應(yīng)用范圍。
[0100]當(dāng)然,實施本申請的任一產(chǎn)品并不一定需要同時達(dá)到以上所述的所有技術(shù)效果。
【附圖說明】
[0101]此處所說明的附圖用來提供對本申請的進(jìn)一步理解,構(gòu)成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當(dāng)限定。在附圖中:
[0102]圖1是現(xiàn)有技術(shù)中標(biāo)準(zhǔn)的HTTP報文交互流程示意圖;
[0103]圖2是現(xiàn)有技術(shù)中采用長輪詢方式實現(xiàn)Comet技術(shù)的方法的方法流程圖;
[0104]圖3是現(xiàn)有技術(shù)中采用基于iframe的流方式實現(xiàn)Comet技術(shù)的方法的方法流程圖;
[0105]圖4是現(xiàn)有技術(shù)中基于HTTP 2.0的服務(wù)端推送方法的方法流程圖;
[0106]圖5是本申請實施例的一種HTTP報文處理方法的方法流程圖;
[0107]圖6是本申請實施例的另一種HTTP報文處理方法的方法流程圖;
[0108]圖7是本申請實施例的另一種HTTP報文處理方法的方法流程圖;
[0109]圖8是本申請實施例的另一種HTTP報文處理方法的方法流程圖;
[0110]圖9是本申請實施例的另一種HTTP報文處理方法的方法流程圖;
[0111]圖10是本申請實施例的另一種HTTP報文處理方法的方法流程圖;
[0112]圖11是本申請實施例的HTTP服務(wù)器的結(jié)構(gòu)圖;
[0113]圖12是本申請實施例的HTTP客戶端的結(jié)構(gòu)圖;
[0114]圖13是本申請實施例的HTTP報文處理系統(tǒng)的結(jié)構(gòu)圖。
【具體實施方式】
[0115]以下將配合附圖及實施例來詳細(xì)說明本申請的實施方式,藉此對本申請如何應(yīng)用技術(shù)手段來解決技術(shù)問題并達(dá)成技術(shù)功效的實現(xiàn)過程能充分理解并據(jù)以實施。
[0116]在一個典型的配置中,計算設(shè)備包括一個或多個處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
[0117]內(nèi)存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。內(nèi)存是計算機可讀介質(zhì)的示例。
[0118]計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動態(tài)隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括非暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號和載波。
[0119]實施例描沭
[0120]下面以一實施例對本申請方法的實現(xiàn)作進(jìn)一步說明。如圖5所示,為本申請實施例的一種HTTP報文處理方法的方法流程圖;本流程中描述了 HTTP客戶端構(gòu)造HTTP請求報文并發(fā)送的過程;該方法包括:
[0121]步驟S500 =HTTP客戶端構(gòu)造包含用于標(biāo)識其支持服務(wù)端推模式的Expect頭部字段(簡稱Expect字段)的HTTP請求報文,并發(fā)送該HTTP請求報文;
[0122]HTTP 1.1 (RFC 2616)中對 Expect 字段的定義如下:
[0123]Expect = "Expect'"': "lftexpectat1n
[0124]expectat1n = 〃100_continue〃|expectat1n-extens1n
[0125]expectat1n-extens1n = token[" = " (token|quoted-string)
[0126]*expect-params]
[0127]expect-params = " ; "token[" = " (token|quoted-string)]
[0128]本步驟中根據(jù)HTTP 1.1的標(biāo)準(zhǔn)要求對Expect字段進(jìn)行擴展,新增一種場景定義,即新增一種Expect字段的字段值用于標(biāo)識客戶端支持服務(wù)端推模式。
[0129]本步驟中使用Expect字段的擴展字段值,即expectat1n-extens1n值來標(biāo)識客戶端支持服務(wù)端推模式。例如:令expectat1n-extens1n = "broadcast",用于標(biāo)識客戶端支持服務(wù)端推模式,從而區(qū)別于現(xiàn)有的HTTP客戶端使用的Expect字段值(100-continue)。經(jīng)過上述擴展后,請求報文的頭部可以包含如下字段:
[0130]Expect:"broadcast"
[0131]需要注意的是,"broadcast"只是用于標(biāo)識HTTP客戶端支持服務(wù)端推模式的Expect字段的擴展字段值的一種示例。本領(lǐng)域技術(shù)人員可以理解,將Expect字段設(shè)置成其它與現(xiàn)有技術(shù)中的Expect字段值不同的值同樣可以達(dá)到相同的效果。例如,可以將Expect字段的擴展字段值設(shè)置為"serverpush",同樣可以實現(xiàn)本發(fā)明。
[0132]步驟S502:在與上述HTTP請求報文相對應(yīng)的長連接斷開前,HTTP客戶端重復(fù)執(zhí)行如下處理:
[0133]通過該長連接接收HTTP響應(yīng)報文。
[0134]下面以第二實施例對本申請方法的實現(xiàn)作進(jìn)一步說明。如圖6所示,為本申請實施例的另一種HTTP報文處理方法的方法流程圖;本流程中描述了 HTTP服務(wù)器構(gòu)造HTTP響應(yīng)報文并發(fā)送的過程;該方法包括:
[0135]步驟S600:接收到包含用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段的HTTP請求報文后,在與該HTTP請求報文相對應(yīng)的長連接斷開前,HTTP服務(wù)器重復(fù)執(zhí)行如下處理:
[0136]當(dāng)前有數(shù)據(jù)需要推送時,在HTTP響應(yīng)報文中標(biāo)識該數(shù)據(jù)的長度,并將該數(shù)據(jù)包含在該HTTP響應(yīng)報文中,通過所述長連接發(fā)送該HTTP響應(yīng)報文。
[0137]下面以第三實施例對本申請方法的實現(xiàn)作進(jìn)一步說明。如圖7所示,為本申請實施例的另一種HTTP報文處理方法的方法流程圖;本流程中描述了 HTTP客戶端和HTTP服務(wù)器之間實現(xiàn)服務(wù)端推送的報文交互過程;該方法包括:
[0138]步驟S700 =HTTP客戶端(簡稱客戶端)構(gòu)造包含用于標(biāo)識其支持服務(wù)端推模式的Expect字段(可以稱為:推模式Expect字段)的HTTP請求報文(簡稱請求報文),并將該請求報文發(fā)送至HTTP服務(wù)器(簡稱服務(wù)器);
[0139]例如,上述請求報文中包含如下頭部字段:
[0140]Expect:"broadcast"
[0141]此外,上述請求報文可以是:GET請求報文,POST請求報文,HEAD請求報文等。
[0142]例如,采用GET請求時,請求報文中可以包含如下行:
[0143]GET http://172.16.0.1:8083/index, html HTTP/1.l\r\n
[0144]Host: 172.16.0.l:8083\r\n
[0145]Expect: broadcast
[0146]Accept: */*\r\n
[0147]User-Agent: TheProxy/1.1.2\r\n
[0148]其中,第I行為請求行(request line),其中包含了請求方法(GET),請求的URL (Uniform Resource Locator,統(tǒng)一資源定位符),協(xié)議版本信息。
[0149]后續(xù)各行分別為不同的報文頭字段,各報文頭字段由字段名稱及相應(yīng)的字段值構(gòu)成。例如,用于標(biāo)識所請求的主機的Host字段,用于標(biāo)識客戶端可識別的內(nèi)容類型的Accept字段,用于標(biāo)識瀏覽器類型的User-Agent字段,以及用于標(biāo)識支持服務(wù)端推模式的Expect 字段。
[0150]與HTTP 1.0不同,HTTP 1.1在默認(rèn)情況下所有的連接都將被保持,即默認(rèn)情況下所有的連接都是長連接,無需在報文頭部用字段“Connect1n:Keep-Alive”顯示地標(biāo)識對應(yīng)的連接是長連接。
[0151]步驟S702:接收到包含推模式Expect字段的請求報文后,服務(wù)器識別出該字段,當(dāng)有數(shù)據(jù)需要推送時,使用HTTP響應(yīng)報文(簡稱響應(yīng)報文)中的Content-Length字段標(biāo)識推送數(shù)據(jù)的長度,并將推送數(shù)據(jù)包含在該響應(yīng)報文的響應(yīng)主體中,向客戶端發(fā)送該響應(yīng)報文;
[0152]此外,服務(wù)器可以在上述響應(yīng)報文中使用狀態(tài)碼lOOcontinue,用于標(biāo)識服務(wù)端推送服務(wù)未結(jié)束(即用于標(biāo)識有后續(xù)數(shù)據(jù)需要推送),需要客戶端保持服務(wù)端推送服務(wù)。當(dāng)然,除了使用lOOcontinue以外,也可以使用其它的狀態(tài)碼來標(biāo)識服務(wù)端推送服務(wù)未結(jié)束(即有后續(xù)數(shù)據(jù)需要推送)。
[0153]例如,HTTP響應(yīng)報文可以包含如下各行:
[0154]HTTP/1.1 100continue\r\n
[0155]Cache-Control:public\r\n
[0156]Date: Sat, 31 Aug 2014 00:24:08 GMT\r\n
[0157]Content-Length:2I\r\n
[0158]\r\n
[0159]Push-Data-from-Server
[0160]其中,第I行為狀態(tài)行(status line),其中包含了協(xié)議版本信息,以及狀態(tài)碼(lOOcontinue);
[0161]后續(xù)第2?4行分別為不同的報文頭字段。例如,用于標(biāo)識緩存策略的Cache-Control字段,用于標(biāo)識日期時間的Date字段,以及用于標(biāo)識數(shù)據(jù)長度的Content-Length 字段。
[0162]第5行為空行,在該空行之后為響應(yīng)報文的響應(yīng)主體,其中包含推送數(shù)據(jù)(“Push-Data-from-Server”)。
[0163]除了用于標(biāo)識服務(wù)端推送服務(wù)未結(jié)束(即有后續(xù)數(shù)據(jù)需要推送)的狀態(tài)碼以外,服務(wù)器還可以使用其它狀態(tài)碼來標(biāo)識服務(wù)端推送服務(wù)結(jié)束(即無后續(xù)數(shù)據(jù)需要推送,包括服務(wù)端推送服務(wù)正常結(jié)束和服務(wù)端推送服務(wù)異常結(jié)束),例如:
[0164](I)用于標(biāo)識服務(wù)端推送服務(wù)正常結(jié)束的狀態(tài)碼,例如,2000K
[0165]如果沒有后續(xù)數(shù)據(jù)需要推送,但當(dāng)前還有數(shù)據(jù)需要推送,則可以在長連接斷開前將該數(shù)據(jù)包含在響應(yīng)報文中,并使用2000K作為響應(yīng)報文的狀態(tài)碼,將響應(yīng)報文發(fā)送給客戶端。
[0166](2)用于標(biāo)識服務(wù)端推送服務(wù)異常結(jié)束的狀態(tài)碼,例如,404 Not Found
[0167]當(dāng)服務(wù)器發(fā)生異常,或生成推送數(shù)據(jù)的應(yīng)用發(fā)生異常,但當(dāng)前還有數(shù)據(jù)需要推送,則可以在長連接斷開前將該數(shù)據(jù)包含在響應(yīng)報文中,并使用404 Not Found(表明請求資源不存在)作為響應(yīng)報文的狀態(tài)碼,將響應(yīng)報文發(fā)送給客戶端。
[0168]除了 404 Not Found以外,上述用于標(biāo)識服務(wù)端推送服務(wù)異常結(jié)束的狀態(tài)碼還可以是:用于標(biāo)識服務(wù)器發(fā)生不可預(yù)期的錯誤的狀態(tài)碼500 Internal Server Error,或用于標(biāo)識服務(wù)器當(dāng)前不能處理客戶端的請求的狀態(tài)碼503 Server Unavailable等。
[0169]步驟S704:接收到服務(wù)器發(fā)送的響應(yīng)報文后,客戶端提取并處理響應(yīng)主體中包含的推送數(shù)據(jù);
[0170]此外,客戶端可以根據(jù)響應(yīng)報文中的狀態(tài)碼lOOcontinue獲知推送服務(wù)未結(jié)束,后續(xù)仍將繼續(xù)進(jìn)行數(shù)據(jù)的推送,因此繼續(xù)保持當(dāng)前的長連接的連接狀態(tài),等待服務(wù)器后續(xù)發(fā)送的數(shù)據(jù)推送報文。
[0171]此后,當(dāng)服務(wù)器再次有數(shù)據(jù)需要推送時,服務(wù)器和客戶端重復(fù)執(zhí)行步驟S702和S704,直至長連接斷開。
[0172]步驟S706:斷開客戶端和服務(wù)器之間的長連接;
[0173]長連接斷開通常發(fā)生在以下兩種情況下:
[0174]1、服務(wù)器結(jié)束當(dāng)前的服務(wù)端推送服務(wù);
[0175]服務(wù)器可以在兩種情況下結(jié)束當(dāng)前的服務(wù)端推送服務(wù):
[0176](I)服務(wù)端推送服務(wù)正常結(jié)束
[0177]當(dāng)沒有后續(xù)數(shù)據(jù)需要推送時,服務(wù)器可以向客戶端返回包含用于標(biāo)識服務(wù)端推送服務(wù)正常結(jié)束的狀態(tài)碼的響應(yīng)報文。
[0178]上述用于標(biāo)識服務(wù)端推送服務(wù)正常結(jié)束的狀態(tài)碼可以是:2000K。
[0179](2)服務(wù)端推送服務(wù)異常結(jié)束
[0180]當(dāng)服務(wù)器發(fā)生異常,或生成推送數(shù)據(jù)的應(yīng)用發(fā)生異常時,服務(wù)器可以向客戶端返回包含用于標(biāo)識服務(wù)端推送服務(wù)異常結(jié)束的狀態(tài)碼的HTTP響應(yīng)報文。
[0181]上述用于標(biāo)識服務(wù)端推送服務(wù)異常結(jié)束的狀態(tài)碼可以是:用于標(biāo)識請求資源不存在的狀態(tài)碼404 Not Found,或用于標(biāo)識服務(wù)器發(fā)生不可預(yù)期的錯誤的狀態(tài)碼500Internal Server Error,或用于標(biāo)識服務(wù)器當(dāng)前不能處理客戶端的請求的狀態(tài)碼503Server Unavailable 等。
[0182]服務(wù)端推送服務(wù)結(jié)束后,客戶端和服務(wù)器都可以主動斷開對應(yīng)的長連接。
[0183]2、長連接超時
[0184]根據(jù)HTTP 1.1的規(guī)定,通常長連接的超時時間由客戶端和服務(wù)器設(shè)置,選擇兩者中的最小值。不同的服務(wù)器可能會設(shè)置不同的默認(rèn)連接超時時間。例如:在Apache HTTPServer ( 一種HTTP服務(wù)器軟件)2.0版本中默認(rèn)的連接超時時間是15秒,而2.2版本中默認(rèn)的連接超時時間是5秒。
[0185]當(dāng)長連接超時時,服務(wù)器會主動斷開當(dāng)前的長連接。
[0186]長連接斷開后,客戶端可以根據(jù)應(yīng)用層業(yè)務(wù)要求,再次執(zhí)行步驟S700,或者終止服務(wù)端推送服務(wù)的接收;
[0187]例如,如果先前的服務(wù)端推送服務(wù)是正常結(jié)束(接收到包含2000K狀態(tài)碼的響應(yīng)報文),客戶端可以不再發(fā)起新的長連接,終止服務(wù)端推送服務(wù)的接收;如果先前的服務(wù)端推送服務(wù)是異常結(jié)束(接收到包含404 Not Found狀態(tài)碼的響應(yīng)報文),客戶端可以在等待預(yù)先設(shè)定的時間后再次執(zhí)行步驟S700 ;如果先前的服務(wù)端推送服務(wù)是由于長連接超時結(jié)束,客戶端可以立即執(zhí)行步驟S700。
[0188]下面以第四實施例對本申請方法的實現(xiàn)作進(jìn)一步說明。如圖8所示,為本申請實施例的另一種HTTP報文處理方法的方法流程圖;本流程中將對HTTP客戶端請求及接收服務(wù)端推送服務(wù)的過程進(jìn)行詳細(xì)描述;該方法包括:
[0189]步驟S800 =HTTP客戶端(簡稱客戶端)構(gòu)造包含用于標(biāo)識其支持服務(wù)端推模式的Expect字段的HTTP請求報文(簡稱請求報文);
[0190]例如,在請求報文中設(shè)置如下Expect字段:Expect: "broadcast"。
[0191]步驟S802:客戶端發(fā)送上述請求報文,并在本地將該請求報文對應(yīng)的長連接的狀態(tài)標(biāo)識為推模式狀態(tài);
[0192]客戶端可以在本地使用變量來進(jìn)行上述狀態(tài)的標(biāo)識,例如將變量bPush的值設(shè)置為I(TRUE)表示對應(yīng)的長連接的狀態(tài)為推模式狀態(tài)。
[0193]步驟S804:客戶端接收HTTP服務(wù)器(簡稱服務(wù)器)發(fā)送的HTTP響應(yīng)報文(簡稱響應(yīng)報文)。
[0194]步驟S806:客戶端判斷當(dāng)前的長連接是否為推模式狀態(tài);如果不是推模式狀態(tài),則執(zhí)行現(xiàn)有的HTTP 1.1的相應(yīng)處理流程,即依照HTTP 1.1規(guī)范的規(guī)定將與上述響應(yīng)報文對應(yīng)的報文主體發(fā)送給服務(wù)器;如果是推模式狀態(tài),則執(zhí)行下一步。
[0195]步驟S808:解析接收到的響應(yīng)報文的狀態(tài)碼:
[0196]如果狀態(tài)碼是用于標(biāo)識推送服務(wù)未結(jié)束(即有后續(xù)數(shù)據(jù)需要推送)的狀態(tài)碼,例如,lOOcontinue,則執(zhí)行下一步;
[0197]如果狀態(tài)碼是用于標(biāo)識服務(wù)端推送服務(wù)結(jié)束(即無后續(xù)數(shù)據(jù)需要推送)的狀態(tài)碼:例如,2000K,或404 Not Found,則跳轉(zhuǎn)至步驟S814 ;
[0198]如果狀態(tài)碼為其它狀態(tài)碼,則執(zhí)行現(xiàn)有的HTTP 1.1的相應(yīng)處理流程,即按照HTTP1.1規(guī)范解析當(dāng)前的狀態(tài)碼,并交由上層應(yīng)用程序處理,跳轉(zhuǎn)至步驟S814。
[0199]步驟S810:解析響應(yīng)報文主體中包含的推送數(shù)據(jù),將推送數(shù)據(jù)交由上層應(yīng)用程序處理,并且保持該長連接的連接狀態(tài)。
[0200]步驟S812:判斷長連接是否已超時,如果未超時,則跳轉(zhuǎn)至步驟S804 ;如果已超時,則執(zhí)行下一步。
[0201]步驟S814:斷開當(dāng)前的長連接,本流程結(jié)束。
[0202]下面以第五實施例對本申請方法的實現(xiàn)作進(jìn)一步說明。如圖9所示,為本申請實施例的另一種HTTP報文處理方法的方法流程圖;本流程中將對HTTP服務(wù)器向HTTP客戶端提供服務(wù)端推送服務(wù)的方法進(jìn)行詳細(xì)描述;該方法包括:
[0203]步驟S900 =HTTP服務(wù)器(簡稱服務(wù)器)接收HTTP客戶端(簡稱客戶端)發(fā)送的HTTP請求報文(簡稱請求報文)。
[0204]步驟S902:判斷接收到的請求報文的頭部是否包含用于標(biāo)識客戶端支持服務(wù)端推模式的 Expect 字段(例如,Expect: "broadcast"):
[0205]如果包含,則執(zhí)行下一步;
[0206]否則,執(zhí)行HTTP 1.1現(xiàn)有規(guī)范所規(guī)定的處理流程,并跳轉(zhuǎn)至步驟S900。
[0207]步驟S904:服務(wù)器在本地將當(dāng)前的長連接的狀態(tài)標(biāo)識為推模式狀態(tài),并保持當(dāng)前的長連接的連接狀態(tài);
[0208]服務(wù)器可以在本地使用變量來進(jìn)行上述狀態(tài)的標(biāo)識,例如將變量bPush的值設(shè)置為I(TRUE)表示當(dāng)前的長連接的狀態(tài)為推模式狀態(tài)。
[0209]步驟S906:服務(wù)器獲取上層應(yīng)用程序生成的數(shù)據(jù),并計算數(shù)據(jù)長度L。
[0210]步驟S908:判斷當(dāng)前的長連接是否為推模式狀態(tài):
[0211]如果是,則執(zhí)行下一步;
[0212]否則,執(zhí)行HTTP 1.1現(xiàn)有規(guī)范所規(guī)定的處理流程,并跳轉(zhuǎn)至步驟S900。
[0213]步驟S910:判斷是否會有后續(xù)數(shù)據(jù)需要推送:如果是,則執(zhí)行下一步;否則,跳轉(zhuǎn)至步驟S914 ;
[0214]生成推送數(shù)據(jù)的上層應(yīng)用程序可以通過變量來標(biāo)識是否還會生成新的數(shù)據(jù)。
[0215]步驟S912:構(gòu)造HTTP響應(yīng)報文(簡稱響應(yīng)報文),將該響應(yīng)報文的狀態(tài)碼設(shè)置為用于標(biāo)識推送服務(wù)未結(jié)束的狀態(tài)碼,例如,lOOcontinue,將該響應(yīng)報文的Content-Length字段值設(shè)置為L,發(fā)送該響應(yīng)報文,跳轉(zhuǎn)至步驟S916。
[0216]步驟S914:構(gòu)造響應(yīng)報文,將該響應(yīng)報文的狀態(tài)碼設(shè)置為用于標(biāo)識服務(wù)端推送服務(wù)結(jié)束(即無后續(xù)數(shù)據(jù)需要推送)的狀態(tài)碼,例如,2000K,或404 Not Found,將該響應(yīng)報文的Content-Length字段值設(shè)置為L,發(fā)送該報文。
[0217]步驟S916:判斷當(dāng)前長連接是否已超時:如果未超時,則跳轉(zhuǎn)至步驟S906 ;如果已超時,則執(zhí)行下一步。
[0218]步驟S918:斷開當(dāng)前長連接,本流程結(jié)束。
[0219]下面以第六實施例對本申請方法的實現(xiàn)作進(jìn)一步說明。如圖10所示,為本申請實施例的另一種HTTP報文處理方法的方法流程圖;本流程中描述了利用本發(fā)明的服務(wù)端推送方法實現(xiàn)應(yīng)用層廣播的具體方法;該方法包括:
[0220]步驟S1000 =HTTP服務(wù)器(簡稱服務(wù)器)獲取上層應(yīng)用程序生成的需要進(jìn)行廣播的數(shù)據(jù),并計算數(shù)據(jù)長度L。
[0221]步驟S1002:服務(wù)器構(gòu)造HTTP響應(yīng)報文(簡稱響應(yīng)報文),將該響應(yīng)報文的狀態(tài)碼設(shè)置為用于標(biāo)識推送服務(wù)未結(jié)束的狀態(tài)碼,例如,lOOcontinue,將該響應(yīng)報文的Content-Length字段值設(shè)置為L0
[0222]步驟S1004:服務(wù)器獲取當(dāng)前已標(biāo)識為推模式狀態(tài)的所有長連接,即獲取所有包含推模式Expect字段(例如,包含“Expect: "broadcast"”)的請求報文所對應(yīng)的當(dāng)前未斷開的長連接;
[0223]在本實施例中,Expect: "broadcast"字段除了用于標(biāo)識客戶端支持推模式外,還可以用于標(biāo)識其有能力處理廣播數(shù)據(jù)。
[0224]步驟S1006 =HTTP服務(wù)器依次通過上述各長連接發(fā)送上述HTTP響應(yīng)報文。
[0225]由上可知,由于現(xiàn)有網(wǎng)絡(luò)架構(gòu)下的組播/廣播是基于IP層面實現(xiàn)的業(yè)務(wù),即需要通過定義一組組播/廣播IP地址,服務(wù)器將組播/廣播包的目的IP地址設(shè)置為該IP地址,由中間路由器復(fù)制組播/廣播包實現(xiàn)組播/廣播業(yè)務(wù)。但是在應(yīng)用層,如果采用現(xiàn)有的請求/響應(yīng)模式,需要解決請求/響應(yīng)報文的同步問題,很難實現(xiàn)應(yīng)用層廣播/組播。而采用本發(fā)明的服務(wù)端推送技術(shù),HTTP服務(wù)器可以以廣播的方式將信息/數(shù)據(jù)主動推送到與其已經(jīng)建立長連接的所有HTTP客戶端,實現(xiàn)了應(yīng)用層廣播/組播業(yè)務(wù)。
[0226]下面以另一實施例對本申請裝置的實現(xiàn)作進(jìn)一步說明。如圖11所示,為本申請實施例的HTTP服務(wù)器的結(jié)構(gòu)圖,所述HTTP服務(wù)器包括:服務(wù)器端接收模塊1100、服務(wù)器端發(fā)送模塊1102 ;其中:
[0227]服務(wù)器端接收模塊,用于接收包含用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段的HTTP請求報文;
[0228]服務(wù)器端發(fā)送模塊,用于在與所述HTTP請求報文相對應(yīng)的長連接斷開前,重復(fù)執(zhí)行如下處理:當(dāng)前有數(shù)據(jù)需要推送時,在HTTP響應(yīng)報文中標(biāo)識該數(shù)據(jù)的長度,并將該數(shù)據(jù)包含在該HTTP響應(yīng)報文中,通過所述長連接發(fā)送該HTTP響應(yīng)報文。
[0229]此外,當(dāng)前有數(shù)據(jù)需要推送時,所述服務(wù)器端發(fā)送模塊在包含所述數(shù)據(jù)的HTTP響應(yīng)報文中設(shè)置如下狀態(tài)碼:
[0230]用于標(biāo)識有后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼;或
[0231]用于標(biāo)識無后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼。
[0232]此外,接收到所述HTTP請求報文后,在與該HTTP請求報文相對應(yīng)的長連接斷開前,所述服務(wù)器端發(fā)送模塊還用于:獲知無后續(xù)數(shù)據(jù)需要推送時,使用所述長連接發(fā)送HTTP響應(yīng)報文,在該HTTP響應(yīng)報文中設(shè)置如下狀態(tài)碼:用于標(biāo)識無后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼。
[0233]所述用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段中包含:用于標(biāo)識支持服務(wù)端推模式的 expectat1n-extens1n 值。
[0234]所述用于標(biāo)識有后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼為:lOOcontinue。
[0235]所述HTTP服務(wù)器與前述的方法流程描述對應(yīng),更具體的描述請參考上述方法流程的敘述,不再一一贅述。
[0236]下面以另一實施例對本申請裝置的實現(xiàn)作進(jìn)一步說明。如圖12所示,為本申請實施例的HTTP客戶端的結(jié)構(gòu)圖,所述HTTP客戶端包括:客戶端發(fā)送模塊1200、客戶端接收模塊1202 ;其中:
[0237]客戶端發(fā)送模塊,用于構(gòu)造包含用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段的HTTP請求報文,并發(fā)送該HTTP請求報文;
[0238]客戶端接收模塊,用于在與該HTTP請求報文相對應(yīng)的長連接斷開前,重復(fù)執(zhí)行如下處理:通過所述長連接接收HTTP響應(yīng)報文。
[0239]此外,通過所述長連接接收到HTTP響應(yīng)報文后,所述客戶端接收模塊還執(zhí)行如下處理:讀取并判斷所述HTTP響應(yīng)報文中包含的狀態(tài)碼:
[0240]如果所述狀態(tài)碼是用于標(biāo)識有后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼,則保持所述長連接的連接狀態(tài);和/或
[0241]如果所述狀態(tài)碼是用于標(biāo)識無后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼,則斷開所述長連接。
[0242]所述用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段中包含:用于標(biāo)識支持服務(wù)端推模式的 expectat1n-extens1n 值。
[0243]所述用于標(biāo)識有后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼為:lOOcontinue。
[0244]所述HTTP客戶端與前述的方法流程描述對應(yīng),更具體的描述請參考上述方法流程的敘述,不再一一贅述。
[0245]下面以另一實施例對本申請系統(tǒng)的實現(xiàn)作進(jìn)一步說明。如圖13所示,為本申請實施例的HTTP報文處理系統(tǒng)的結(jié)構(gòu)圖,所述HTTP報文處理系統(tǒng)包括:HTTP客戶端130,HTTP服務(wù)器132 ;其中:
[0246]HTTP客戶端中包括:客戶端發(fā)送模塊1200,客戶端接收模塊1202 ;
[0247]HTTP服務(wù)器中包括:服務(wù)器端接收模塊1100、服務(wù)器端發(fā)送模塊1102 ;
[0248]客戶端發(fā)送模塊,用于構(gòu)造包含用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段的HTTP請求報文,并發(fā)送該HTTP請求報文;
[0249]客戶端接收模塊,用于在與該HTTP請求報文相對應(yīng)的長連接斷開前,重復(fù)執(zhí)行如下處理:通過所述長連接接收HTTP響應(yīng)報文。
[0250]服務(wù)器端接收模塊,用于接收包含用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段的HTTP請求報文;
[0251]服務(wù)器端發(fā)送模塊,用于在與所述HTTP請求報文相對應(yīng)的長連接斷開前,重復(fù)執(zhí)行如下處理:當(dāng)前有數(shù)據(jù)需要推送時,在HTTP響應(yīng)報文中標(biāo)識該數(shù)據(jù)的長度,并將該數(shù)據(jù)包含在該HTTP響應(yīng)報文中,通過所述長連接發(fā)送該HTTP響應(yīng)報文。
[0252]所述系統(tǒng)與前述的方法流程描述對應(yīng),更具體的描述請參考上述方法流程的敘述,不再一一贅述。
[0253]上述說明示出并描述了本申請的若干優(yōu)選實施例,但如前所述,應(yīng)當(dāng)理解本申請并非局限于本文所披露的形式,不應(yīng)看作是對其他實施例的排除,而可用于各種其他組合、修改和環(huán)境,并能夠在本文所述發(fā)明構(gòu)想范圍內(nèi),通過上述教導(dǎo)或相關(guān)領(lǐng)域的技術(shù)或知識進(jìn)行改動。而本領(lǐng)域人員所進(jìn)行的改動和變化不脫離本申請的精神和范圍,則都應(yīng)在本申請所附權(quán)利要求的保護范圍內(nèi)。
【主權(quán)項】
1.一種HTTP報文處理方法,其特征在于,該方法包括: 接收到包含用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段的HTTP請求報文后,在與該HTTP請求報文相對應(yīng)的長連接斷開前,HTTP服務(wù)器重復(fù)執(zhí)行如下處理: 當(dāng)前有數(shù)據(jù)需要推送時,在HTTP響應(yīng)報文中標(biāo)識該數(shù)據(jù)的長度,并將該數(shù)據(jù)包含在該HTTP響應(yīng)報文中,通過所述長連接發(fā)送該HTTP響應(yīng)報文。2.根據(jù)權(quán)利要求1所述的方法,其特征在于, 所述用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段中包含:用于標(biāo)識支持服務(wù)端推模式的 expectat1n-extens1n 值。3.根據(jù)權(quán)利要求1所述的方法,其特征在于, 當(dāng)前有數(shù)據(jù)需要推送時,在包含所述數(shù)據(jù)的HTTP響應(yīng)報文中設(shè)置如下狀態(tài)碼: 用于標(biāo)識有后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼;或 用于標(biāo)識無后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼。4.根據(jù)權(quán)利要求1所述的方法,其特征在于, 接收到所述HTTP請求報文后,在與該HTTP請求報文相對應(yīng)的長連接斷開前,還包含如下步驟: HTTP服務(wù)器獲知無后續(xù)數(shù)據(jù)需要推送時,使用所述長連接發(fā)送HTTP響應(yīng)報文,在該HTTP響應(yīng)報文中設(shè)置如下狀態(tài)碼:用于標(biāo)識無后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼。5.根據(jù)權(quán)利要求3所述的方法,其特征在于, 所述用于標(biāo)識有后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼為:100COntinue。6.一種HTTP報文處理方法,其特征在于,該方法包括: HTTP客戶端構(gòu)造包含用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段的HTTP請求報文,并發(fā)送該HTTP請求報文; 在與該HTTP請求報文相對應(yīng)的長連接斷開前,HTTP客戶端重復(fù)執(zhí)行如下處理: 通過所述長連接接收HTTP響應(yīng)報文。7.根據(jù)權(quán)利要求6所述的方法,其特征在于, 所述用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段中包含:用于標(biāo)識支持服務(wù)端推模式的 expectat1n-extens1n 值。8.根據(jù)權(quán)利要求6所述的方法,其特征在于, 通過所述長連接接收到HTTP響應(yīng)報文后,HTTP客戶端還執(zhí)行如下處理:讀取并判斷所述HTTP響應(yīng)報文中包含的狀態(tài)碼: 如果所述狀態(tài)碼是用于標(biāo)識有后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼,則保持所述長連接的連接狀態(tài);和/或 如果所述狀態(tài)碼是用于標(biāo)識無后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼,則斷開所述長連接。9.根據(jù)權(quán)利要求8所述的方法,其特征在于, 所述用于標(biāo)識有后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼為:100COntinue。10.一種HTTP服務(wù)器,其特征在于,該服務(wù)器中包括: 服務(wù)器端接收模塊,用于接收包含用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段的HTTP請求報文; 服務(wù)器端發(fā)送模塊,用于在與所述HTTP請求報文相對應(yīng)的長連接斷開前,重復(fù)執(zhí)行如下處理:當(dāng)前有數(shù)據(jù)需要推送時,在HTTP響應(yīng)報文中標(biāo)識該數(shù)據(jù)的長度,并將該數(shù)據(jù)包含在該HTTP響應(yīng)報文中,通過所述長連接發(fā)送該HTTP響應(yīng)報文。11.根據(jù)權(quán)利要求10所述的服務(wù)器,其特征在于, 所述用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段中包含:用于標(biāo)識支持服務(wù)端推模式的 expectat1n-extens1n 值。12.根據(jù)權(quán)利要求10所述的服務(wù)器,其特征在于, 當(dāng)前有數(shù)據(jù)需要推送時,所述服務(wù)器端發(fā)送模塊在包含所述數(shù)據(jù)的HTTP響應(yīng)報文中設(shè)置如下狀態(tài)碼: 用于標(biāo)識有后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼;或 用于標(biāo)識無后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼。13.根據(jù)權(quán)利要求10所述的服務(wù)器,其特征在于, 接收到所述HTTP請求報文后,在與該HTTP請求報文相對應(yīng)的長連接斷開前,所述服務(wù)器端發(fā)送模塊還用于:獲知無后續(xù)數(shù)據(jù)需要推送時,使用所述長連接發(fā)送HTTP響應(yīng)報文,在該HTTP響應(yīng)報文中設(shè)置如下狀態(tài)碼:用于標(biāo)識無后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼。14.根據(jù)權(quán)利要求12所述的服務(wù)器,其特征在于, 所述用于標(biāo)識有后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼為:100COntinue。15.—種HTTP客戶端,其特征在于,該客戶端中包括: 客戶端發(fā)送模塊,用于構(gòu)造包含用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段的HTTP請求報文,并發(fā)送該HTTP請求報文; 客戶端接收模塊,用于在與該HTTP請求報文相對應(yīng)的長連接斷開前,重復(fù)執(zhí)行如下處理:通過所述長連接接收HTTP響應(yīng)報文。16.根據(jù)權(quán)利要求15所述的客戶端,其特征在于, 所述用于標(biāo)識支持服務(wù)端推模式的Expect頭部字段中包含:用于標(biāo)識支持服務(wù)端推模式的 expectat1n-extens1n 值。17.根據(jù)權(quán)利要求15所述的客戶端,其特征在于, 通過所述長連接接收到HTTP響應(yīng)報文后,所述客戶端接收模塊還執(zhí)行如下處理:讀取并判斷所述HTTP響應(yīng)報文中包含的狀態(tài)碼: 如果所述狀態(tài)碼是用于標(biāo)識有后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼,則保持所述長連接的連接狀態(tài);和/或 如果所述狀態(tài)碼是用于標(biāo)識無后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼,則斷開所述長連接。18.根據(jù)權(quán)利要求17所述的客戶端,其特征在于, 所述用于標(biāo)識有后續(xù)數(shù)據(jù)需要推送的狀態(tài)碼為:100COntinue。19.一種HTTP報文處理系統(tǒng),其特征在于,該系統(tǒng)中包括: 如權(quán)利要求10所述的HTTP服務(wù)器,以及如權(quán)利要求15所述的HTTP客戶端。
【文檔編號】H04L29/08GK105991689SQ201510056362
【公開日】2016年10月5日
【申請日】2015年2月3日
【發(fā)明人】閔慶歡
【申請人】阿里巴巴集團控股有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
龙里县| 馆陶县| 丹阳市| 文水县| 开远市| 封丘县| 寻乌县| 建始县| 兴国县| 卓尼县| 台南县| 汽车| 峡江县| 灵丘县| 柳河县| 株洲县| 宿州市| 甘南县| 台东市| 融水| 武安市| 宜城市| 四子王旗| 泽州县| 依兰县| 宁蒗| 许昌县| 双鸭山市| 视频| 静安区| 准格尔旗| 包头市| 都江堰市| 裕民县| 宁乡县| 微山县| 镇平县| 霍林郭勒市| 霍邱县| 桦甸市| 资阳市|