15.5.2 HTTP協(xié)議報(bào)文格式(1)
接下來(lái)我們看看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端的套接字偵聽端口一般是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é)議名稱 + 宿主名 + 目錄與文件名
其中"CRLF"表示回車換行。
"請(qǐng)求行"中的"方法"描述了對(duì)指定資源執(zhí)行的動(dòng)作,常用的方法"GET"、"HEAD"和"POST"等3種,它們的含義如表15-8所示:
表15-8 HTTP請(qǐng)求方法
取值
描述
GET
從WEB服務(wù)器中獲取對(duì)象,不同類型的對(duì)
象將獲取不同的信息,比如:
· 文件類型對(duì)象,獲取該文件的內(nèi)容。
· 程序類型對(duì)象,獲取該程序執(zhí)行的結(jié)果。
· 數(shù)據(jù)庫(kù)查詢類型對(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ù)類型、壓縮方法、語(yǔ)言、長(zhǎng)度、壓縮方法、最后一次修改時(shí)間、數(shù)據(jù)有效期等信息。
實(shí)體內(nèi)容是報(bào)文傳送的附加信息,一般供POST請(qǐng)求填寫。
GET請(qǐng)求報(bào)文例子
一個(gè)URL為"
GET
http://www.zhiliaowang.com/toupiaoceshi.asp?name=朱云翔 HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-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版:
POST /sp.cgi HTTP/1.0 /* 請(qǐng)求行,服務(wù)程序?yàn)閟p.cgi */
Host:
www.spserver.com /* 以下為實(shí)體頭信息 */
Authorization: Basic <Base64 串>
Content-Length: <Content-Length><CommandId>=<4> /* 以下為POST請(qǐng)求的實(shí)體信息 */
<SequenceNumber>=<205502327125025327> /* 實(shí)體部分輸送報(bào)文 */
<UserNumber>=<8613001125453>
<SPNumber>=<168>
<MessageContent>=<ABCD 1234>
一般情況下,采用POST報(bào)文傳送信息的數(shù)據(jù)存儲(chǔ)在"實(shí)體"部分中。
15.5.2 HTTP協(xié)議報(bào)文格式(2)
3. 接收HTTP應(yīng)答報(bào)文
WEB服務(wù)器處理客戶請(qǐng)求,并向客戶機(jī)發(fā)送應(yīng)答報(bào)文,HTTP協(xié)議的應(yīng)答報(bào)文格式為:
應(yīng)答報(bào)文 = 狀態(tài)行(實(shí)體頭信息)CRLF [實(shí)體內(nèi)容]
狀態(tài)行 = HTTP版本號(hào) 狀態(tài)碼 原因敘述
狀態(tài)碼描述了WEB服務(wù)器執(zhí)行客戶機(jī)請(qǐng)求的狀態(tài)信息,其取值含義如表15-8所示:
表15-8 HTTP應(yīng)答響應(yīng)碼含義
取值
描述
1××
保留。
2××
成功接收,比如“200”表示處理成功。
3××
客戶需進(jìn)一步細(xì)化請(qǐng)求。
4××
客戶錯(cuò)誤,比如“404”表示訪問(wèn)的
指定資源不存在。
5××
服務(wù)器錯(cuò)誤。
GET應(yīng)答報(bào)文例子
一個(gè)請(qǐng)求URL為"
下面是HTTP協(xié)議中關(guān)于POST應(yīng)答報(bào)文例子,節(jié)自《中國(guó)聯(lián)合通信公司短消息網(wǎng)關(guān)系統(tǒng)接口協(xié)議(SGIP)》V1.2版:
一般情況下,POST應(yīng)答報(bào)文的"實(shí)體"部分存儲(chǔ)實(shí)際傳輸?shù)男畔ⅰ?div style="height:15px;">