關(guān)于HTTP協(xié)議的介紹和協(xié)議報(bào)文的格式
HTTP協(xié)議(Hypertext Transfer Protocol――超文本傳輸協(xié)議),瀏覽器端(客戶端)向WEB服務(wù)器端訪問(wèn)頁(yè)面的過(guò)程和 HTTP協(xié)議報(bào)文的格式。?
??? 基于HTTP協(xié)議的客戶機(jī)訪問(wèn)包括4個(gè)過(guò)程,分別是建立TCP套接字連接、發(fā)送HTTP請(qǐng)求報(bào)文、接收HTTP應(yīng)答報(bào)文和關(guān)閉TCP套接字連接:?
1. 創(chuàng)建TCP套接字連接?
??? 客戶端與WEB服務(wù)器創(chuàng)建TCP套接字連接,其中WEB端服務(wù)器的地址可以通過(guò)域名解析確定,WEB端的套接字偵聽(tīng)端口一般是80。?
2. 發(fā)送HTTP請(qǐng)求報(bào)文?
??? 客戶端向WEB服務(wù)端發(fā)送請(qǐng)求報(bào)文,HTTP協(xié)議的請(qǐng)求報(bào)文格式為:?
請(qǐng)求消息 = 請(qǐng)求行(實(shí)體頭信息)CRLF[實(shí)體內(nèi)容]請(qǐng)求行 = 方法 URL HTTP版本號(hào) CRLF方法 = GET|HEAD|POST|擴(kuò)展方法URL = 協(xié)議名稱(chēng) + 宿主名 + 目錄與文件名?
其中"CRLF"表示回車(chē)換行。?
??? "請(qǐng)求行"中的"方法"描述了對(duì)指定資源執(zhí)行的動(dòng)作,常用的方法"GET"、"HEAD"和"POST"等3種,它們的含義如表15-8所示:?
表15-8 HTTP請(qǐng)求方法?
取值?? 描述?
GET 從WEB服務(wù)器中獲取對(duì)象,不同類(lèi)型的對(duì)?
象將獲取不同的信息,比如:?
· 文件類(lèi)型對(duì)象,獲取該文件的內(nèi)容。?
· 程序類(lèi)型對(duì)象,獲取該程序執(zhí)行的結(jié)果。?
· 數(shù)據(jù)庫(kù)查詢類(lèi)型對(duì)象,獲取該查詢的結(jié)果。?
HEAD 要求服務(wù)器查找對(duì)象的元信息。?
POST 從客戶端向WEB服務(wù)器發(fā)送數(shù)據(jù)。?
??? "實(shí)體頭信息"中記載了報(bào)文的屬性,利用這些信息可以實(shí)現(xiàn)客戶端與WEB服務(wù)器之間的請(qǐng)求或應(yīng)答,它包括報(bào)文的數(shù)據(jù)類(lèi)型、壓縮方法、語(yǔ)言、長(zhǎng)度、壓縮方法、最后一次修改時(shí)間、數(shù)據(jù)有效期等信息。?
??? 實(shí)體內(nèi)容是報(bào)文傳送的附加信息,一般供POST請(qǐng)求填寫(xiě)。?
GET請(qǐng)求報(bào)文例子?
??? 一個(gè)URL為"http://www.zhiliaowang.com/toupiaoceshi.asp?name=朱云翔"的GET請(qǐng)求報(bào)文例子如下:?
Java代碼?
? ?GET http://www.zhiliaowang.com /toupiaoceshi.asp?name=朱云翔 HTTP/1.1Accept: */*Accept-Language: zh- cnAccept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE
6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)Host: www.zhiliaowang.comConnection: Keep-Alive?
GET http://www.zhiliaowang.com/toupiaoceshi.asp?name=朱云翔 HTTP/1.1Accept: */*Accept-Language: zh-cnAccept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows
NT 5.1; SV1; .NET CLR 2.0.50727)Host: www.zhiliaowang.comConnection: Keep-Alive?
其中"/toupiaoceshi.asp?name=朱云翔"是URL信息,語(yǔ)句"ACCEPT:*/*"及其后的語(yǔ)句是"實(shí)體頭信息"。?
??? 注意:在語(yǔ)句"Connection:Keep-Alive"下的空行是必須的。?
POST請(qǐng)求報(bào)文例子?
??? 下面是HTTP協(xié)議中關(guān)于POST請(qǐng)求報(bào)文例子,節(jié)自《中國(guó)聯(lián)合通信公司短消息網(wǎng)關(guān)系統(tǒng)接口協(xié)議(SGIP)》V1.2版:?
Java代碼?
? ?POST /sp.cgi HTTP/1.0???? /* 請(qǐng)求行,服務(wù)程序?yàn)閟p.cgi */Host: www.spserver.com???? /* 以下為實(shí)體頭信息 */Authorization: Basic