HTTP協議方法以及報頭分析
HTTP協議內容:HTTP URL、HTTP請求、HTTP響應和HTTP訊息。
HTTP超文字傳輸協議,是應用層協議。
HTTP是一個基於請求/響應模式的、無狀態的協議。
瀏覽器與伺服器通訊過程:客戶發起連線;客戶傳送請求;伺服器響應請求;伺服器關閉連線。
HTTP1.1版是一個持續連線,支援流水線請求
HTTP URL格式:http://host[“:”port][abs_path]
Host為Internet主機名或IP地址
Abs_path是URI(Uniform Resource Identifier,統一資源識別符號),當它為請求時預設由瀏覽器給出為”/”形式給出。
提示:
URI(包括URL和URN,通用資源名)是個符號結構,指定構成web資源的字串的各個不同部分。URL為特殊的URI,它包括了查詢某個資源足夠的資訊。
HTTP請求組成:請求行,訊息報頭,請求正文組成,其中訊息報頭和請求正文都是可選的。
請求行格式:MethodRequest—URI HTTP—Version CRLF //注意CRLF表示回車換行
例如:GET /form.html HTTP/1.1(CRLF)
例如:HEAD/index.html HTTP/1.1
HTTP請求的方法(HTTP中方法區分大小寫,HTML文件中方法名不區分大小寫)
方法 |
作用 |
GET |
請求獲取由Request—URI所標識的資源 |
POST |
在Request—URI所標識的資源後附加新德資源 |
HEAD |
請求獲取由Request—URI所標識的資源的響應訊息報頭 |
PUT |
請求伺服器儲存一個資源,並用Request—URI作為其標識 |
DELETE |
請求伺服器刪除由Request—URI所標識的資源I |
TRACE |
請求伺服器回送收到的請求資訊,主要用於測試或診斷 |
CONNECT |
保留將來使用 |
OPTIONS |
請求查詢伺服器的效能,或查詢與資源相關的選項和需求 |
當我們在瀏覽器的位址列中直接輸入網址訪問時,瀏覽器就採用GET方法向伺服器獲取資源。
POST方法用於向目的伺服器發出請求,請求伺服器接受附在請求後邊的資料,表單提交時用得較多。在訊息報頭後的兩個回車換行後為提交的資料
HTTP響應,在伺服器接收和解釋後會返回一個HTTP響應訊息。它由狀態行,訊息報頭,響應正文組成。其中訊息報頭和訊息正文都是可選的。
狀態行格式:HTTP—Version Status—Code Reason—Phrase CRLF // 狀態程式碼和狀態描述
例如:HTTP/1.1200 ok CRLF //CRLF指回車換行
響應正文指伺服器返回的資源的內容。在響應訊息報頭和響應正文間有一個空行
狀態程式碼的第一個數字定義了響應的類別
1XX |
指定資訊——標識請求已接收,繼續處理 |
2XX |
成功——表示請求已經被成功接收、理解、接受 |
3XX |
重定向——要完成請求必須進行更進一步的操作 |
4XX |
客戶端錯誤——請求有語法錯誤或請求無法實現 |
5XX |
伺服器端錯誤——伺服器未能實現合法的請求 |
常見狀態程式碼與狀態描述
狀態程式碼 |
狀態描述 |
說明 |
200 |
Ok |
客戶端請求成功 |
400 |
Bad Request |
由於客戶端請求有語法錯誤,不能被伺服器所理解 |
401 |
Unauthorized |
請求未經授權,這個狀態程式碼必須和WWW—Authenticate報頭域一起使用 |
403 |
Forbidden |
伺服器收到請求,但是拒絕服務,並常在響應正文中給出拒絕原因 |
404 |
Not Found |
請求的資源不存在,例如輸入了錯誤的URL |
500 |
Internal Server Error |
伺服器發生不可預期的錯誤,導致無法完成客戶端的請求 |
503 |
Service Unavailable |
伺服器當前不能夠處理客戶端的請求,一段時間後可能恢復 |
HTTP訊息報頭包括請求報頭、響應報頭、普通報頭和實體報頭。
每個報頭域組成:名字+”:”+空格+值組成,訊息報頭域的名字與大小寫無關的。
普通報頭中,有少數報頭域應用於所有的請求和響應訊息,但並不用於傳輸的實體,這些報頭域只用於傳輸的訊息。
常用請求報頭域
報頭名 |
作用 |
Accept |
指定客戶端接受哪些型別的資訊,例如:Accept:image/gif |
Accept—Charset |
指定客戶端接受的字符集,例如:Accept—Charset:gb2312 |
Accept—Encoding |
指定客戶端可接受的內容編碼,例如:Accept—Encoding:gzip |
Accept—Language |
指定客戶端可接受的一種自然語言,例如:Accept—Language:zh—cn |
Authorization |
用於證明客戶端有權檢視某個資源 |
Host |
指定被請求資源的Internet主機和埠號,它是必須得報頭域,例如:Host:www.baidu.com |
User—Agent |
允許客戶端將它的作業系統、瀏覽器和其它屬性告訴伺服器。它不是必須的。 |
常用響應報頭:允許伺服器傳遞不能放在狀態行中附加響應資訊,以及伺服器資訊和對Request—URI所標識的資源進行下一步訪問的資訊
報頭名 |
作用 |
Location |
用於重定向接受者到一個新德位置。如當域名更換時。 |
Server |
包含伺服器用來處理請求的軟體資訊。與User—Agent相對應。例如:Server:Apache—Coyote/1.1 |
WWW—Authenticate |
必須被包含在401(未授權的)響應訊息中,與Authorization請求報頭域是相關的。當客戶端收到401響應時,如果要求伺服器對其進行驗證,客戶端就傳送一個包含了Authorization報頭域的請求, 例如:WWW—Authorization:Basic realm=”Basic Auth Test!” |
常用普通報頭:
報頭名 |
說明 |
Cache—Control |
指定快取指令,分為請求或響應時的快取指令,快取指令是單向的,C 例如JSP程式碼:response.setHeader(“Cache—Control”,”no—cache”); |
Date |
訊息產生的日期和時間,客戶端只有在傳送訊息中包含了訊息正文的時候,才傳送Date報頭域,伺服器端響應總是包含Date報頭域。 |
Connection |
允許傳送者指定連線的選項,伺服器響應後的狀態 |
Pragmatic |
用於包含特定實現(implementation—specific)的指令,Pragma:no—cache與HTTP1.1版的Cache—Control:no—cache作用相同 |
常用實體報頭:請求和響應訊息都可以傳送一個實體,實體由實體報頭域和實體正文組成,實體正文常務請求訊息的請求正文或響應訊息的響應正文。實體報頭域和實體正文並不一定在一起傳送。
實體報頭定義了實體正文和請求所標識的資源的元資訊(元資訊指描述其他資訊的資訊)
實體報頭名 |
作用 |
Content—Encoding |
媒體型別的修飾符,常用於文件壓縮方法,例如:Content—Encoding:gzip |
Content—Language |
實體報頭域描述了資源所用的自然語言, |
Content—Length |
指明實體正文的長度,沒有包括實體報頭的長度 |
Content—Type |
指明發送給接收者的實體正文的媒體型別 例如:Content—Type:text/html:charset=GB2312 |
Last—Modified |
指示資源最後的修改日期和時間 |
Expires |
給出響應過期的日期和時間,非法的日期時間格式(包括零)當做已經過期。 例如:Expires:Thu.15 Sep 2005 16:00:00 GMT |