1. 程式人生 > >HTTP協議方法以及報頭分析

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