天天看點

HTTP頭域字段

HTTP(HyperTextTransferProtocol)是超文本傳輸協定的縮寫,它用于傳送WWW方式的資料,關于HTTP協定的詳細内容請參考RFC2616。HTTP協定采用了請求/響應模型。用戶端向伺服器發送一個請求,請求頭包含請求的方法、URI、協定版本、以及包含請求修飾符、客戶資訊和内容的類似于MIME的消息結構。伺服器以一個狀态行作為響應,相應的内容包括消息協定的版本,成功或者錯誤編碼加上包含伺服器資訊、實體元資訊以及可能的實體内容。

通常HTTP消息包括客戶機向伺服器的請求消息和伺服器向客戶機的響應消息。這兩種類型的消息由一個起始行,一個或者多個頭域,一個隻是頭域結束的空行和可選的消息體組成。 HTTP的頭域包括通用頭,請求頭,響應頭和實體頭四個部分。 每個頭域由一個域名,冒号(:)和域值三部分組成。域名是大小寫無關的,域值前可以添加任何數量的空格符,頭域可以被擴充為多行,在每行開始處,使用至少一個空格或制表符。

1、通用頭域

通用頭域包含請求和響應消息都支援的頭域,通用頭域包含Cache-Control、Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。對通用頭域的擴充要求通訊雙方都支援此擴充,如果存在不支援的通用頭域,一般将會作為實體頭域處理。下面簡單介紹幾個在UPnP消息中使用的通用頭域。

Cache-Control頭域

Cache-Control指定請求和響應遵循的緩存機制。在請求消息或響應消息中設定Cache-Control并不會修改另一個消息處理過程中的緩存處理過程。請求時的緩存指令包括no-cache、no- store、max-age、max-stale、min-fresh、only-if-cached,響應消息中的指令包括public、 private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、 max-age。各個消息中的指令含義如下:

Public訓示響應可被任何緩存區緩存。

Private訓示對于單個使用者的整個或部分響應消息,不能被共享緩存處理。這允許伺服器僅僅描述當使用者的部分響應消息,此響應消息對于其他使用者的請求無效。

no-cache訓示請求或響應消息不能緩存

no-store用于防止重要的資訊被無意的釋出。在請求消息中發送将使得請求和響應消息都不使用緩存。

max-age訓示客戶機可以接收生存期不大于指定時間(以秒為機關)的響應。

min-fresh訓示客戶機可以接收響應時間小于目前時間加上指定時間的響應。

max-stale訓示客戶機可以接收超出逾時期間的響應消息。如果指定max-stale消息的值,那麼客戶機可以接收超出逾時期指定值之内的響應消息。

Date頭域

Date頭域表示消息發送的時間,時間的描述格式由rfc822定義。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的時間表示世界标準時,換算成本地時間,需要知道使用者所在的時區。

Pragma頭域

Pragma頭域用來包含實作特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1協定中,它的含義和Cache-Control:no-cache相同。

2、請求消息

請求消息的第一行為下面的格式:

Method SP Request-URI SP HTTP-Version CRLF 

Method表示對于Request-URI完成的方法,這個字段是大小寫敏感的, 包括OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE。方法GET和HEAD應該被所有的通用WEB伺服器支援,其他所有方法的實作是可選的。 GET方法取回由Request-URI辨別的資訊。HEAD方法也是取回由Request-URI辨別的資訊,隻是可以在響應時,不傳回消息體。 POST方法可以請求伺服器接收包含在請求中的實體資訊,可以用于送出表單,向新聞討論區、BBS、郵件群組和資料庫發送消息。

SP表示空格。

Request-URI遵循URI格式,在此字段為星号(*)時,說明請求并不用于某個特定的資源位址,而是用于伺服器本身。

HTTP-Version表示支援的HTTP版本,例如為HTTP/1.1。

CRLF表示換行回車符。

請求頭域允許用戶端向伺服器傳遞關于請求或者關于客戶機的附加資訊。請求頭域可能包含下列字段Accept、Accept-Charset、Accept- Encoding、Accept-Language、Authorization、From、Host、If-Modified-Since、If- Match、If-None-Match、If-Range、If-Range、If-Unmodified-Since、Max-Forwards、 Proxy-Authorization、Range、Referer、User-Agent。對請求頭域的擴充要求通訊雙方都支援,如果存在不支援的請求頭域,一般将會作為實體頭域處理。

典型的請求消息:

GET http://class/download.microtool.de:80/somedata.exe

Host:download.microtool.de

Accept:**

Accept-Language: en-us

Connection: Keep-Alive

Host: localhost

Referer:  http://localhost/links.asp

User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)

Accept-Encoding: gzip, deflate

該請求具有請求行,其中包括方法 (GET)、資源路徑 (/articles/news/today.asp) 和 HTTP 版本 (HTTP/1.1)。由于該請求沒有正文,故所有請求行後面的内容都是頭的一部分。緊接着頭之後是一個空行,表示頭已結束。

響應頭示例

Web 伺服器可以通過多種方式響應前一個請求。假設檔案是可以通路的,并且使用者具有檢視該檔案的權限,則響應類似于:

HTTP/1.1 200 OK

Server: Microsoft-IIS/5.0

Date: Thu, 13 Jul 2000 05:46:53 GMT

Content-Length: 2291

Content-Type: text/html

Set-Cookie: ASPSESSIONIDQQGGGNCG=LKLDFFKCINFLDMFHCBCBMFLJ; path=/

Cache-control: private

...

響應的第一行稱為狀态行。它包含響應所用的 HTTP 版本、狀态編碼 (200) 和原因短語。示例中包含一個頭,其中具有五個字段,接着是一個空行(回車和換行符),然後是響應正文的頭兩行。

有關HTTP頭完整、詳細的說明,請參見 http://www.w3.org/Protocols/的HTTP規範。

轉載于 http://www.cnblogs.com/my_life/articles/2104952.html

繼續閱讀