HTTP協議報文格式
HTTP協議(Hypertext Transfer Protocol――超文本傳輸協議),瀏覽器端(客戶端)向WEB服務器端訪問頁面的過程和HTTP協議報文的格式。
基於HTTP協議的客戶機訪問包括4個過程,分別是創建TCP套接字鏈接、發送HTTP請求報文、接收HTTP應答報文和關閉TCP套接字鏈接:
1. 建立TCP套接字鏈接
客戶端與WEB服務器建立TCP套接字鏈接,其中WEB端服務器的地址能夠經過域名解析肯定,WEB端的套接字偵聽端口通常是80。
2. 發送HTTP請求報文
客戶端向WEB服務端發送請求報文,HTTP協議的請求報文格式爲:
請求消息 = 請求行(實體頭信息)CRLF[實體內容] 請求行 = 方法 URL HTTP版本號 CRLF 方法 = GET|HEAD|POST|擴展方法 URL = 協議名稱 + 宿主名 + 目錄與文件名 |
其中"CRLF"表示回車換行。
"請求行"中的"方法"描述了對指定資源執行的動做,經常使用的方法"GET"、"HEAD"和"POST"等3種,它們的含義如表15-8所示:
表15-8 HTTP請求方法
取值
|
描述
|
GET
|
從WEB服務器中獲取對象,不一樣類型的對 象將獲取不一樣的信息,好比:
· 文件類型對象,獲取該文件的內容。
· 程序類型對象,獲取該程序執行的結果。
· 數據庫查詢類型對象,獲取該查詢的結果。
|
HEAD
|
要求服務器查找對象的元信息。
|
POST
|
從客戶端向WEB服務器發送數據。
|
"實體頭信息"中記載了報文的屬性,利用這些信息能夠實現客戶端與WEB服務器之間的請求或應答,它包括報文的數據類型、壓縮方法、語言、長度、壓縮方法、最後一次修改時間、數據有效期等信息。
實體內容是報文傳送的附加信息,通常供POST請求填寫。
GET請求報文例子
其中"/toupiaoceshi.asp?name=朱雲翔"是URL信息,語句"ACCEPT:*/*"及其後的語句是"實體頭信息"。
注意:在語句"Connection:Keep-Alive"下的空行是必須的。
POST請求報文例子
下面是HTTP協議中關於POST請求報文例子,節自《中國聯合通訊公司短消息網關係統接口協議(SGIP)》V1.2版:
POST /sp.cgi HTTP/1.0 /* 請求行,服務程序爲sp.cgi */ Host: www.spserver.com /* 如下爲實體頭信息 */ Authorization: Basic <Base64 串> Content-Length: <Content-Length> <CommandId>=<4> /* 如下爲POST請求的實體信息 */ <SequenceNumber>=<205502327125025327> /* 實體部分輸送報文 */ <UserNumber>=<8613001125453> <SPNumber>=<168> <MessageContent>=<ABCD 1234> |
通常狀況下,採用POST報文傳送信息的數據存儲在"實體"部分中。
請求報文附註:
HTTP請求包括三部分:請求行(Request Line),頭部(Headers)和數據體(Body)。其中,請求行由請求方法(method),請求網址Request-URI和協議 (Protocol)構成,而請求頭包括多個屬性,數據體則能夠被認爲是附加在請求以後的文本或二進制文件。
下面這個例子顯示了一個HTTP請求的Header內容,這些數據是真正以網絡HTTP協議從IE瀏覽器傳遞到Apache服務器上的。
GET /qingdao.html HTTP/1.1
Accept:text/html, */*
Accept-Language:zh-cn
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0(compatible;MSIE 5.01;Windows NT 5.0;DigExt)
Connection:Keep-Alive
這段程序使用了6個Header,還有一些Header沒有出現。咱們參考這個例子具體解釋HTTP請求格式。
1.HTTP請求行:請求行格式爲Method Request-URI Protocol。在上面這個例子裏,"GET / HTTP/1.1"是請求行。
2.Accept:指瀏覽器或其餘客戶能夠接愛的MIME文件格式。能夠根據它判斷並返回適當的文件格式。
3.Accept-Charset:指出瀏覽器能夠接受的字符編碼。英文瀏覽器的默認值是ISO-8859-1.
4.Accept-Language:指出瀏覽器能夠接受的語言種類,如en或en-us,指英語。
5.Accept-Encoding:指出瀏覽器能夠接受的編碼方式。編碼方式不一樣於文件格式,它是爲了壓縮文件並加速文件傳遞速度。瀏覽器在接收到Web響應以後先解碼,而後再檢查文件格式。
6.Authorization:當使用密碼機制時用來標識瀏覽器。
7.Cache-Control:設置關於請求被代理服務器存儲的相關選項。通常用不到。
8.Connection:用來告訴服務器是否能夠維持固定的HTTP鏈接。HTTP/1.1使用Keep-Alive爲默認值,這樣,當瀏覽器須要多個文件時(好比一個HTML文件和相關的圖形文件),不須要每次都創建鏈接。
9.Content-Type:用來表名request的內容類型。能夠用HttpServletRequest的getContentType()方法取得。
10.Cookie:瀏覽器用這個屬性向服務器發送Cookie。Cookie是在瀏覽器中寄存的小型數據體,它能夠記載和服務器相關的用戶信息,也能夠用來實現會話功能。
11.Expect:表時客戶預期的響應狀態。
12.From:給出客戶端HTTP請求負責人的email地址。
13.Host:對應網址URL中的Web名稱和端口號。
14.If-Match:供PUT方法使用。
15.If-Modified-Since:客戶使用這個屬性代表它只須要在指定日期以後更改過的網頁。由於瀏覽器可使用其存儲的文件而沒必要從服務器請求,這樣節省了Web資源。因爲Servlet是動態生成的網頁,通常不須要使用這個屬性。
16.If-None-Match:和If-Match相反的操做,供PUT方法使用。
17.If-Unmodified-Since:和If-Match-Since相反。
18.Pragma:這個屬性只有一種值,即Pragma:no-cache,代表若是servlet充當代理服務器,即便其有已經存儲的網頁,也要將請求傳遞給目的服務器。
19.Proxy-Authorization:代理服務器使用這個屬性,通常用不到。
20.Range:若是客戶有部分網頁,這個屬性能夠請求剩餘部分。
22.Upgrage:客戶經過這個屬性設定可使用與HTTP/1.1不一樣的協議。
23.User-Agent:是客戶瀏覽器名稱。
24.Via:用來記錄Web請求通過的代理服務器或Web通道。
25.Warning:用來由客戶聲明傳遞或存儲(cache)錯誤。
3. 接收HTTP應答報文
WEB服務器處理客戶請求,並向客戶機發送應答報文,HTTP協議的應答報文格式爲:
應答報文 = 狀態行(實體頭信息)CRLF [實體內容]
狀態行 = HTTP版本號 狀態碼 緣由敘述
狀態碼描述了WEB服務器執行客戶機請求的狀態信息,其取值含義如表15-8所示:
表15-8 HTTP應答響應碼含義
取值
|
描述
|
1××
|
保留。
|
2××
|
成功接收,好比「200」表示處理成功。
|
3××
|
客戶需進一步細化請求。
|
4××
|
客戶錯誤,好比「404」表示訪問的 指定資源不存在。
|
5××
|
服務器錯誤。
|
GET應答報文例子
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語言編程與項目實戰<br></b> <b>投票測試<br></b> 感謝你爲選手 朱雲翔 投票! </body> </html> |
語句"HTTP/1.1 200 OK"中,"200"是響應碼,"OK"是緣由描述。
POST應答報文例子
下面是HTTP協議中關於POST應答報文例子,節自《中國聯合通訊公司短消息網關係統接口協議(SGIP)》V1.2版:
HTTP/1.0 200 OK /* 狀態行,應答成功 */ Date: Tue, 13 Mar 2001 02:45:12 GMT /* 如下爲實體頭信息 */ Server: Apache/1.3.12 (Unix) Content-Type: text/html Connection: close
<CommandId>=<80000004> /* 如下爲POST應答的實體信息 */ <SequenceNumber>=<205502327125025327> <UserNumber>=<8613001125453> <SPNumber>=<168> <MessageContent>=< EFGH 5678> <Result>=<0>
|
通常狀況下,POST應答報文的"實體"部分存儲實際傳輸的信息。
4. 關閉TCP套接字鏈接
客戶機與服務器雙方關閉套接字鏈接,結束TCP/IP對話。