HTTP請求頭中各字段解釋

前言:這兩天在作Web Api的服務,須要進行認證,用到了請求頭裏的Authorization,因爲對請求頭不是很熟悉,因此找了相關資料查看,整理一下,以便往後查看。javascript

1、Http頭域列表與解釋之Request篇

 HTTP 頭域是HTTP協議中請求(request)和響應(response)中的頭部信息,其實就是HTTP通訊的操做參數,告訴web服務器和瀏覽器怎樣處理這個通訊。HTTP頭從一個請求信息或者響應信息的第二行開始(第一行是請求行或者響應行),以兩個CR-LF字符組結束(CR:回車符,\r,LF:換行符\n)而每一個HTTP頭是字符串形式的,用冒號分割的鍵值對,多個HTTP頭之間用CR-LF字符組隔開。html

某些http頭能夠有註釋,例如user-agent,server,via。但這些註釋會被服務器或者瀏覽器忽略IETF組織已經將一些核心的HTTP頭定義在RFC2616規範中,這些HTTP頭是每一個基於HTTP協議的軟件必須實現的,而其餘一些更新和擴展的頭域也必須被基於HTTP的軟件實現。固然,各個軟件也能夠定義本身的頭域。java

另外一方面,RFC2616規範中並無限制每一個HTTP頭的長度,或者限制HTTP頭的數量,但出於性能和安全的考慮,多數服務器都會本身做規定,例如apache2.3 就規定每一個HTTP頭不能超過8190個字節,每一個請求不能超過100個HTTP頭。web

如下來看看發送一個請求(request)時候,可能包含的各個HTTP頭和它的解釋。ajax

一、標準的請求頭

  • Accept : 瀏覽器(或者其餘基於HTTP的客戶端程序)能夠接收的內容類型(Content-types),例如 Accept: text/plainapache

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

  • Accept-Encoding:瀏覽器能夠處理的編碼方式,注意這裏的編碼方式有別於字符集,這裏的編碼方式一般指gzip,deflate等。例如 Accept-Encoding: gzip, deflate緩存

  • Accept-Language:瀏覽器接收的語言,其實也就是用戶在什麼語言地區,例如簡體中文的就是 Accept-Language: zh-CN安全

  • Accept-Datetime:(這個暫時沒搞清楚什麼意思)服務器

  • Authorization:在HTTP中,服務器能夠對一些資源進行認證保護,若是你要訪問這些資源,就要提供用戶名和密碼,這個用戶名和密碼就是在Authorization頭中附帶的,格式是「username:password」字符串的base64編碼,例如:Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==中,basic指使用basic認證方式, QWxhZGRpbjpvcGVuIHNlc2FtZQ==使用base64解碼就是Aladdin:open sesame

  • Cache-Control:這個指令在request和response中都有,用來指示緩存系統(服務器上的,或者瀏覽器上的)應該怎樣處理緩存,由於這個頭域比較重要,特別是但願使用緩 存改善性能的時候,內容也較多,因此我想在下一篇博文中主要介紹一下。

  • Connection:告訴服務器這個user agent(一般就是瀏覽器)想要使用怎樣的鏈接方式。值有keep-alive和close。http1.1默認是keep-alive。keep-alive就是瀏覽器和服務器 的通訊鏈接會被持續保存,不會立刻關閉,而close就會在response後立刻關閉。但這裏要注意一點,咱們說HTTP是無狀態的,跟這個是否keep-alive沒有關係,不要認爲keep-alive是對HTTP無狀態的特性的改進。

  • Cookie:瀏覽器向服務器發送請求時發送cookie,或者服務器向瀏覽器附加cookie,就是將cookie附近在這裏的。例如:Cookie:user=admin

  • Content-Length:一個請求的請求體的內存長度,單位爲字節(byte)。請求體是指在HTTP頭結束後,兩個CR-LF字符組以後的內容,常見的有POST提交的表單數據,這個Content-Length並不包含請求行和HTTP頭的數據長度。

  • Content-MD5:使用base64進行了編碼的請求體的MD5校驗和。例如:Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==

  • Content-Type:請求體中的內容的mime類型。一般只會用在POST和PUT方法的請求中。例如:Content-Type: application/x-www-form-urlencoded

  • Date:發送請求時的GMT時間。例如:Date: Tue, 15 Nov 1994 08:12:31 GMT

  • Expect:指示須要使用服務器某些特殊的功能。(這個我不是很清楚)

  • From:發送這個請求的用戶的email地址。例如:From: user@example.com

  • Host:被服務器的域名或IP地址,若是不是通用端口,還包含該端口號,例如:Host: www.some.com:182

  • If-Match :一般用在使用PUT方法對服務器資源進行更新的請求中,意思就是,詢問服務器,如今正在請求的資源的tag和這個If-Match的tag相不相同,若是相同,則證實服務器上的這個資源仍是舊的,如今能夠被更新,若是不相同,則證實該資源被更新過,如今就不用再更新了(不然有可能覆蓋掉其餘人所作的更改)。

  • If-Modified-Since:詢問服務器如今正在請求的資源在某個時間以來有沒有被修改過,若是沒有,服務器則返回304狀態來告訴瀏覽器使用瀏覽器本身本地的緩存,若是有修改過,則返回200,併發送新的資源(固然若是資源不存在,則返回404。)

  • If-None-Match:和If-Modified-Since用意差很少,不過不是根據時間來肯定,而是根據一個叫ETag的東西來肯定。關於etag我想在下一篇博客介紹一下。

  • 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:微軟使用與其負載平衡的一個頭域。

    

 

     【注:本文內容參考自:http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

相關文章
相關標籤/搜索