接下來我們看看HTTP協議(Hypertext Transfer Protocol――超文本傳輸協議)瀏覽器端(客戶端)向WEB服務器端訪問頁面的過程和HTTP協議報文的格式。
基於HTTP協議的客戶機訪問包括4個過程,分別是建立TCP套接字連接、發送HTTP請求報文、接收HTTP應答報文和關閉TCP套接字連接:
1. 創建TCP套接字連接
客戶端與WEB服務器創建TCP套接字連接,其中WEB端服務器的地址可以通過域名解析確定,WEB端的套接字偵聽端口一般是80。
2. 發送HTTP請求報文
客戶端向WEB服務端發送請求報文,HTTP協議的請求報文格式爲:
請求消息 = 請求行(實體頭信息)CRLF[實體內容] |
其中"CRLF"表示回車換行。
"請求行"中的"方法"描述了對指定資源執行的動作,常用的方法"GET"、"HEAD"和"POST"等3種,它們的含義如表15-8所示:
表15-8 HTTP請求方法
取值 |
描述 |
GET |
從WEB服務器中獲取對象,不同類型的對 · 文件類型對象,獲取該文件的內容。 · 程序類型對象,獲取該程序執行的結果。 · 數據庫查詢類型對象,獲取該查詢的結果。 |
HEAD |
要求服務器查找對象的元信息。 |
POST |
從客戶端向WEB服務器發送數據。 |
"實體頭信息"中記載了報文的屬性,利用這些信息可以實現客戶端與WEB服務器之間的請求或應答,它包括報文的數據類型、壓縮方法、語言、長度、壓縮方法、最後一次修改時間、數據有效期等信息。
實體內容是報文傳送的附加信息,一般供POST請求填寫。
GET請求報文例子
一個URL爲"http://www.zhiliaowang.com/toupiaoceshi.asp?name=朱雲翔"的GET請求報文例子如下:
GET http://www.zhiliaowang.com/toupiaoceshi.asp?name=朱雲翔 HTTP/1.1 |
其中"/toupiaoceshi.asp?name=朱雲翔"是URL信息,語句"ACCEPT:*/*"及其後的語句是"實體頭信息"。
注意:在語句"Connection:Keep-Alive"下的空行是必須的。
POST請求報文例子
下面是HTTP協議中關於POST請求報文例子,節自《中國聯合通信公司短消息網關係統接口協議(SGIP)》V1.2版:
POST /sp.cgi HTTP/1.0 /* 請求行,服務程序爲sp.cgi */ <CommandId>=<4> /* 以下爲POST請求的實體信息 */ |
3. 接收HTTP應答報文
WEB服務器處理客戶請求,並向客戶機發送應答報文,HTTP協議的應答報文格式爲:
應答報文 = 狀態行(實體頭信息)CRLF [實體內容]
狀態行 = HTTP版本號 狀態碼 原因敘述
狀態碼描述了WEB服務器執行客戶機請求的狀態信息,其取值含義如表15-8所示:
表15-8 HTTP應答響應碼含義
取值 |
描述 |
1×× |
保留。 |
2×× |
成功接收,比如“200”表示處理成功。 |
3×× |
客戶需進一步細化請求。 |
4×× |
客戶錯誤,比如“404”表示訪問的 |
5×× |
服務器錯誤。 |
GET應答報文例子
一個請求URL爲"http://www.zhiliaowang.com/toupiaoceshi.asp?name=朱雲翔"的應答報文例子如下:
HTTP/1.1 200 OK <html> |
語句"HTTP/1.1 200 OK"中,"200"是響應碼,"OK"是原因描述。
POST應答報文例子
下面是HTTP協議中關於POST應答報文例子,節自《中國聯合通信公司短消息網關係統接口協議(SGIP)》V1.2版:
HTTP/1.0 200 OK /* 狀態行,應答成功 */
<CommandId>=<80000004> /* 以下爲POST應答的實體信息 */ |
一般情況下,POST應答報文的"實體"部分存儲實際傳輸的信息。
4. 關閉TCP套接字連接
客戶機與服務器雙方關閉套接字連接,結束TCP/IP對話。