1. 程式人生 > >HTTP請求頭中各欄位解釋

HTTP請求頭中各欄位解釋

Accept : 瀏覽器(或者其他基於HTTP的客戶端程式)可以接收的內容型別(Content-types),例如 Accept: text/plain

Accept-Charset:瀏覽器能識別的字符集,例如 Accept-Charset: utf-8

Accept-Encoding:瀏覽器可以處理的編碼方式,注意這裡的編碼方式有別於字符集,這裡的編碼方式通常指gzip,deflate等。例如 Accept-Encoding: gzip, deflate
Accept-Language:瀏覽器接收的語言,其實也就是使用者在什麼語言地區,例如簡體中文的就是 Accept-Language: zh-CN

Accept-Datetime:設定接受的版本時間,例如Accept-Datetime: Thu, 31 May 2007 20:35:00 GMT
Authorization:在HTTP中,伺服器可以對一些資源進行認證保護,如果你要訪問這些資源,就要提供使用者名稱和密碼,這個使用者名稱和密碼就是在Authorization頭中附帶的,格式是“username:password”字串的base64編碼,例如:Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ中,basic指使用basic認證方式, QWxhZGRpbjpvcGVuIHNlc2FtZQ使用base64解碼就是Aladdin:open sesame

Cache-Control:這個指令在request和response中都有,用來指示快取系統(伺服器上的,或者瀏覽器上的)應該怎樣處理快取,因為這個頭域比較重要,特別是希望使用快取改善效能的時候,內容也較多,設定請求響應鏈上所有的快取機制必須遵守的指令,eg:Cache-Control: no-cache

Connection:告訴伺服器這個user agent(通常就是瀏覽器)想要使用怎樣的連線方式。值有keep-alive和close。http1.1預設是keep-alive。keep-alive就是瀏覽器和伺服器 的通訊連線會被持續儲存,不會馬上關閉,而close就會在response後馬上關閉。但這裡要注意一點,我們說HTTP是無狀態的,跟這個是否keep-alive沒有關係,不要認為keep-alive是對HTTP無狀態的特性的改進。
設定當前連線和hop-by-hop協議請求欄位列表的控制選項

Connection: keep-alive
Connection: Upgrade

Cookie:瀏覽器向伺服器傳送請求時傳送cookie,或者伺服器向瀏覽器附加cookie,就是將cookie附近在這裡的。例如:Cookie:user=admin
設定伺服器使用Set-Cookie傳送的http cookie
Cookie: $Version=1; Skin=new;

**Content-Length:**一個請求的請求體的記憶體長度,單位為位元組(byte)。請求體是指在HTTP頭結束後,兩個CR-LF字元組之後的內容,常見的有POST提交的表單資料,這個Content-Length並不包含請求行和HTTP頭的資料長度。
設定請求體的位元組長度
Content-Length: 348

Content-MD5:使用base64進行了編碼的請求體的MD5校驗和。例如:Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==
基於MD5演算法對請求體內容進行Base64二進位制編碼

Content-Type:請求體中的內容的mime型別。通常只會用在POST和PUT方法的請求中。例如:Content-Type: application/x-www-form-urlencoded
設定請求體的MIME型別(適用POST和PUT請求)

**Date:**傳送請求時的GMT時間。例如:Date: Tue, 15 Nov 1994 08:12:31 GMT
設定訊息傳送的日期和時間

Expect:標識客戶端需要的特殊瀏覽器行為
Expect: 100-continue

From:傳送這個請求的使用者的email地址。例如:From: [email protected]
設定傳送請求的使用者的email地址

Host:被伺服器的域名或IP地址,如果不是通用埠,還包含該埠號,例如:Host: www.some.com:182
設定伺服器域名和TCP埠號,如果使用的是服務請求標準埠號,埠號可以省略
Host: en.wikipedia.org:8080
Host: en.wikipedia.org

If-Match :通常用在使用PUT方法對伺服器資源進行更新的請求中,意思就是,詢問伺服器,現在正在請求的資源的tag和這個If-Match的tag相不相同,如果相同,則證明伺服器上的這個資源還是舊的,現在可以被更新,如果不相同,則證明該資源被更新過,現在就不用再更新了(否則有可能覆蓋掉其他人所做的更改)。
設定客戶端的ETag,當時客戶端ETag和伺服器生成的ETag一致才執行,適用於更新自從上次更新之後沒有改變的資源

If-Modified-Since:詢問伺服器現在正在請求的資源在某個時間以來有沒有被修改過,如果沒有,伺服器則返回304狀態來告訴瀏覽器使用瀏覽器自己本地的快取,如果有修改過,則返回200,併發送新的資源(當然如果資源不存在,則返回404。)
設定更新時間,從更新時間到服務端接受請求這段時間內如果資源沒有改變,允許服務端返回304 Not Modified

If-None-Match:和If-Modified-Since用意差不多,不過不是根據時間來確定,而是根據一個叫ETag的東西來確定。關於etag我想在下一篇部落格介紹一下。
設定客戶端ETag,如果和服務端接受請求生成的ETage相同,允許服務端返回304 Not Modified

If-Range:告訴伺服器如果這個資源沒有更改過(根據If-Range後面給出的Etag判斷),就傳送這個資源中在瀏覽器缺少了的某些部分給瀏覽器,如果該資源以及被修改過,則將整個資源重新發送一份給瀏覽器。

If-Unmodified-Since:詢問伺服器現在正在請求的資源在某個時刻以來是否沒有被修改過。

Max-Forwards:限制請求資訊在代理伺服器或閘道器中向前傳遞的次數。
Pragma:好像只有一個值,就是:no-cache。Pragma:no-cache 與cache-control:no-cache相同,只不過cache-control:no-cache是http1.1專門指定的,而Pragma:no-cache可以在http1.0和1.1中使用

Proxy-Authorization:連線到某個代理時使用的身份認證資訊,跟Authorization頭差不多。例如:Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
為連線代理授權認證資訊

Range:在HTTP頭中,”Range”字眼都表示“資源的byte形式資料的順序排列,並且取其某一段資料”的意思。Range頭就是表示請求資源的從某個數值到某個數值間的資料,例如:Range: bytes=500-999 就是表示請求資源從500到999byte的資料。資料的分段下載和多執行緒下載就是利用這個實現的。

Referer:指當前請求的URL是在什麼地址引用的。例如在www.a.com/index.html頁面中點選一個指向www.b.com的超連結,那麼,這個www.b.com的請求中的Referer就是www.a.com/index.html。通常我們見到的圖片防盜鏈就是用這個實現的。

Upgrade:請求伺服器更新至另外一個協議,例如:Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11

User-Agent:通常就是使用者的瀏覽器相關資訊。例如:User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0

Via:用來記錄一個請求經過了哪些代理或閘道器才被送到目標伺服器上。例如一個請求從瀏覽器出發(假設使用http/1.0),傳送給名為 SomeProxy的內部代理,然後被轉發至www.somenet.com的公共代理(使用http/1.1),最後被轉發至目標伺服器www.someweb.com,那麼在someweb.com中收到的via 頭應該是:via:1.0 someProxy 1.1 www.someweb.com(apache 1.1)

Warning:記錄一些警告資訊。
通用但非標準的HTTP頭(通常,非標準的頭域都是用“X-”開頭,例如”x-powered-by”):

X-Requested-With:主要是用來識別ajax請求,很多javascript框架會發送這個頭域(值為XMLHttpRequest)

DNT : DO NOT TRACK的縮寫,要求伺服器程式不要跟蹤記錄使用者資訊。DNT: 1 (開啟DNT) DNT: 0 (關閉DNT)火狐,safari,IE9都支援這個頭域,並且於2011年3月7日被提交至IETF組織實現標準化

X-Forwarded-For : 記錄一個請求從客戶端出發到目標伺服器過程中經歷的代理,或者負載平衡裝置的IP。

X-Forwarded-Proto:記錄一個請求一個請求最初從瀏覽器發出時候,是使用什麼協議。因為有可能當一個請求最初和反向代理通訊時,是使用https,但反向代理和伺服器通訊時改變成http協議,這個時候,X-Forwarded-Proto的值應該是https

Front-End-Https:微軟使用與其負載平衡的一個頭域。