15.5.2 HTTP協(xié)議報文格式(1) 接下來我們看看HTTP協(xié)議(Hypertext Transfer Protocol――超文本傳輸協(xié)議)瀏覽器端(客戶端)向WEB服務(wù)器端訪問頁面的過程和HTTP協(xié)議報文的格式。 基于HTTP協(xié)議的客戶機訪問包括4個過程,分別是建立TCP套接字連接、發(fā)送HTTP請求報文、接收HTTP應(yīng)答報文和關(guān)閉TCP套接字連接: 1. 創(chuàng)建TCP套接字連接 客戶端與WEB服務(wù)器創(chuàng)建TCP套接字連接,其中WEB端服務(wù)器的地址可以通過域名解析確定,WEB端的套接字偵聽端口一般是80。 2. 發(fā)送HTTP請求報文 客戶端向WEB服務(wù)端發(fā)送請求報文,HTTP協(xié)議的請求報文格式為: 請求消息 = 請求行(實體頭信息)CRLF[實體內(nèi)容] 請求行 = 方法 URL HTTP版本號 CRLF 方法 = GET|HEAD|POST|擴展方法 URL = 協(xié)議名稱 + 宿主名 + 目錄與文件名 |
其中"CRLF"表示回車換行。 "請求行"中的"方法"描述了對指定資源執(zhí)行的動作,常用的方法"GET"、"HEAD"和"POST"等3種,它們的含義如表15-8所示: 表15-8 HTTP請求方法 取值 | 描述 | GET | 從WEB服務(wù)器中獲取對象,不同類型的對 象將獲取不同的信息,比如: · 文件類型對象,獲取該文件的內(nèi)容。 · 程序類型對象,獲取該程序執(zhí)行的結(jié)果。 · 數(shù)據(jù)庫查詢類型對象,獲取該查詢的結(jié)果。 | HEAD | 要求服務(wù)器查找對象的元信息。 | POST | 從客戶端向WEB服務(wù)器發(fā)送數(shù)據(jù)。 |
"實體頭信息"中記載了報文的屬性,利用這些信息可以實現(xiàn)客戶端與WEB服務(wù)器之間的請求或應(yīng)答,它包括報文的數(shù)據(jù)類型、壓縮方法、語言、長度、壓縮方法、最后一次修改時間、數(shù)據(jù)有效期等信息。 實體內(nèi)容是報文傳送的附加信息,一般供POST請求填寫。 GET請求報文例子 一個URL為"http://www./toupiaoceshi.asp?name=朱云翔"的GET請求報文例子如下: GET http://www./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. Connection: Keep-Alive
|
其中"/toupiaoceshi.asp?name=朱云翔"是URL信息,語句"ACCEPT:*/*"及其后的語句是"實體頭信息"。 注意:在語句"Connection:Keep-Alive"下的空行是必須的。 POST請求報文例子 下面是HTTP協(xié)議中關(guān)于POST請求報文例子,節(jié)自《中國聯(lián)合通信公司短消息網(wǎng)關(guān)系統(tǒng)接口協(xié)議(SGIP)》V1.2版: POST /sp.cgi HTTP/1.0 /* 請求行,服務(wù)程序為sp.cgi */ Host: www. /* 以下為實體頭信息 */ Authorization: Basic <Base64 串> Content-Length: <Content-Length> <CommandId>=<4> /* 以下為POST請求的實體信息 */ <SequenceNumber>=<205502327125025327> /* 實體部分輸送報文 */ <UserNumber>=<8613001125453> <SPNumber>=<168> <MessageContent>=<ABCD 1234> | 一般情況下,采用POST報文傳送信息的數(shù)據(jù)存儲在"實體"部分中。
15.5.2 HTTP協(xié)議報文格式(2) 3. 接收HTTP應(yīng)答報文 WEB服務(wù)器處理客戶請求,并向客戶機發(fā)送應(yīng)答報文,HTTP協(xié)議的應(yīng)答報文格式為: 應(yīng)答報文 = 狀態(tài)行(實體頭信息)CRLF [實體內(nèi)容] 狀態(tài)行 = HTTP版本號 狀態(tài)碼 原因敘述 狀態(tài)碼描述了WEB服務(wù)器執(zhí)行客戶機請求的狀態(tài)信息,其取值含義如表15-8所示: 表15-8 HTTP應(yīng)答響應(yīng)碼含義 取值 | 描述 | 1×× | 保留。 | 2×× | 成功接收,比如“200”表示處理成功。 | 3×× | 客戶需進一步細化請求。 | 4×× | 客戶錯誤,比如“404”表示訪問的 指定資源不存在。 | 5×× | 服務(wù)器錯誤。 |
GET應(yīng)答報文例子 一個請求URL為"http://www./toupiaoceshi.asp?name=朱云翔"的應(yīng)答報文例子如下: HTTP/1.1 200 OK Connection: keep-alive Date: Thu, 26 Jul 2007 14:00:02 GMT Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET Content-Length: 190 Content-Type: text/html Set-Cookie: ASPSESSIONIDSAATTCSQ=JOPPKDCAMHHBEOICJPGPBJOB; path=/ Cache-control: private <html> <head> <title>精通Unix下C語言編程</title> </head> <body> <b>精通Unix下C語言編程與項目實戰(zhàn)<br></b> <b>投票測試<br></b> 感謝你為選手 朱云翔 投票! </body> </html> |
語句"HTTP/1.1 200 OK"中,"200"是響應(yīng)碼,"OK"是原因描述。 POST應(yīng)答報文例子 下面是HTTP協(xié)議中關(guān)于POST應(yīng)答報文例子,節(jié)自《中國聯(lián)合通信公司短消息網(wǎng)關(guān)系統(tǒng)接口協(xié)議(SGIP)》V1.2版: HTTP/1.0 200 OK /* 狀態(tài)行,應(yīng)答成功 */ Date: Tue, 13 Mar 2001 02:45:12 GMT /* 以下為實體頭信息 */ Server: Apache/1.3.12 (Unix) Content-Type: text/html Connection: close <CommandId>=<80000004> /* 以下為POST應(yīng)答的實體信息 */ <SequenceNumber>=<205502327125025327> <UserNumber>=<8613001125453> <SPNumber>=<168> <MessageContent>=< EFGH 5678> <Result>=<0> |
一般情況下,POST應(yīng)答報文的"實體"部分存儲實際傳輸?shù)男畔ⅰ?/p> 4. 關(guān)閉TCP套接字連接 客戶機與服務(wù)器雙方關(guān)閉套接字連接,結(jié)束TCP/IP對話。
|