HTTP Header Request 解析

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

某些http頭可以有注釋熟菲,例如user-agent,server,via。但這些注釋會被服務器或者瀏覽器忽略IETF組織已經將一些核心的HTTP頭定義在RFC2616規(guī)范中朴恳,這些HTTP頭是每個基于HTTP協議的軟件必須實現的抄罕,而其他一些更新和擴展的頭域也必須被基于HTTP的軟件實現。當然于颖,各個軟件也可以定義自己的頭域呆贿。

另一方面,RFC2616規(guī)范中并沒有限制每個HTTP頭的長度森渐,或者限制HTTP頭的數量做入,但出于性能和安全的考慮,多數服務器都會自己作規(guī)定章母,例如apache2.3 就規(guī)定每個HTTP頭不能超過8190個字節(jié)母蛛,每個請求不能超過100個HTTP頭。

以下來看看發(fā)送一個請求(request)時候乳怎,可能包含的各個HTTP頭和它的解釋彩郊。

標準的請求頭:

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

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

Accept-Encoding:瀏覽器可以處理的編碼方式蚪缀,注意這里的編碼方式有別于字符集秫逝,這里的編碼方式通常指gzip,deflate等。例如 Accept-Encoding: gzip, deflate

Accept-Language:瀏覽器接收的語言询枚,其實也就是用戶在什么語言地區(qū)违帆,例如簡體中文的就是 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就是瀏覽器和服務器 的通信連接會被持續(xù)保存匿情,不會馬上關閉兰迫,而close就會在response后馬上關閉信殊。但這里要注意一點,我們說HTTP是無狀態(tài)的汁果,跟這個是否keep-alive沒有關系涡拘,不要認為keep-alive是對HTTP無狀態(tài)的特性的改進。

Cookie:瀏覽器向服務器發(fā)送請求時發(fā)送cookie据德,或者服務器向瀏覽器附加cookie鳄乏,就是將cookie附近在這里的。例如:Cookie:user=admin

Content-Length:一個請求的請求體的內存長度棘利,單位為字節(jié)(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:發(fā)送請求時的GMT時間系冗。例如:Date: Tue, 15 Nov 1994 08:12:31 GMT

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

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

Host:被服務器的域名或IP地址掌敬,如果不是通用端口惯豆,還包含該端口號池磁,例如:Host: www.some.com:182

If-Match:通常用在使用PUT方法對服務器資源進行更新的請求中,意思就是楷兽,詢問服務器框仔,現在正在請求的資源的tag和這個If-Match的tag相不相同,如果相同拄养,則證明服務器上的這個資源還是舊的离斩,現在可以被更新,如果不相同瘪匿,則證明該資源被更新過跛梗,現在就不用再更新了(否則有可能覆蓋掉其他人所做的更改)。

If-Modified-Since:詢問服務器現在正在請求的資源在某個時間以來有沒有被修改過棋弥,如果沒有核偿,服務器則返回304狀態(tài)來告訴瀏覽器使用瀏覽器自己本地的緩存,如果有修改過顽染,則返回200漾岳,并發(fā)送新的資源(當然如果資源不存在,則返回404粉寞。)

If-None-Match:和If-Modified-Since用意差不多尼荆,不過不是根據時間來確定,而是根據一個叫ETag的東西來確定唧垦。關于etag我想在下一篇博客介紹一下捅儒。

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

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:用來記錄一個請求經過了哪些代理或網關才被送到目標服務器上待讳。例如一個請求從瀏覽器出發(fā)(假設使用http/1.0),發(fā)送給名為 SomeProxy的內部代理仰剿,然后被轉發(fā)至www.somenet.com的公共代理(使用http/1.1)创淡,最后被轉發(fā)至目標服務器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框架會發(fā)送這個頭域(值為XMLHttpRequest)

DNT:DO NOT TRACK的縮寫露乏,要求服務器程序不要跟蹤記錄用戶信息。DNT: 1 (開啟DNT) DNT: 0 (關閉DNT)火狐涂邀,safari,IE9都支持這個頭域瘟仿,并且于2011年3月7日被提交至IETF組織實現標準化

X-Forwarded-For:記錄一個請求從客戶端出發(fā)到目標服務器過程中經歷的代理,或者負載平衡設備的IP必孤。

X-Forwarded-Proto:記錄一個請求一個請求最初從瀏覽器發(fā)出時候猾骡,是使用什么協議。因為有可能當一個請求最初和反向代理通信時敷搪,是使用https,但反向代理和服務器通信時改變成http協議幢哨,這個時候赡勘,X-Forwarded-Proto的值應該是https

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

X-ATT-DeviceId:AT&A的產品中使用的頭域捞镰,不過不是很清楚用途闸与。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市岸售,隨后出現的幾起案子践樱,更是在濱河造成了極大的恐慌,老刑警劉巖凸丸,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拷邢,死亡現場離奇詭異,居然都是意外死亡屎慢,警方通過查閱死者的電腦和手機瞭稼,發(fā)現死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門忽洛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人环肘,你說我怎么就攤上這事欲虚。” “怎么了悔雹?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵复哆,是天一觀的道長。 經常有香客問我腌零,道長寂恬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任莱没,我火速辦了婚禮初肉,結果婚禮上,老公的妹妹穿的比我還像新娘饰躲。我一直安慰自己牙咏,他們只是感情好,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布嘹裂。 她就那樣靜靜地躺著妄壶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪寄狼。 梳的紋絲不亂的頭發(fā)上丁寄,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音泊愧,去河邊找鬼伊磺。 笑死,一個胖子當著我的面吹牛删咱,可吹牛的內容都是我干的屑埋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼痰滋,長吁一口氣:“原來是場噩夢啊……” “哼摘能!你這毒婦竟也來了?” 一聲冷哼從身側響起敲街,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤团搞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后多艇,有當地人在樹林里發(fā)現了一具尸體逻恐,經...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了梢莽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萧豆。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖昏名,靈堂內的尸體忽然破棺而出涮雷,到底是詐尸還是另有隱情,我是刑警寧澤轻局,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布洪鸭,位于F島的核電站,受9級特大地震影響仑扑,放射性物質發(fā)生泄漏览爵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一镇饮、第九天 我趴在偏房一處隱蔽的房頂上張望蜓竹。 院中可真熱鬧,春花似錦储藐、人聲如沸俱济。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛛碌。三九已至,卻和暖如春辖源,著一層夾襖步出監(jiān)牢的瞬間蔚携,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工克饶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留酝蜒,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓彤路,卻偏偏與公主長得像秕硝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子洲尊,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發(fā)現奈偏,斷路器坞嘀,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • Http協議詳解 標簽(空格分隔): Linux 聲明:本片文章非原創(chuàng),內容來源于博客園作者MIN飛翔的HTTP協...
    Sivin閱讀 5,222評論 3 82
  • 工作流程 一次HTTP操作稱為一個事務惊来,其工作過程可分為四步: 1)首先客戶機與服務器需要建立連接丽涩。只要單擊某個超...
    保川閱讀 4,602評論 2 14
  • 本文整理自MIN飛翔博客 [1] 1. 概念 協議是指計算機通信網絡中兩臺計算機之間進行通信所必須共同遵守的規(guī)定或...
    HoyaWhite閱讀 2,671評論 2 20
  • 暮色四合,漫步在九月的光影里矮男,九月移必,天高地闊;九月毡鉴,乍寒還暖崔泵;九月,枝頭妖嬈…九月猪瞬,我憎瘸,聽風伴雨,竊竊私語陈瘦;九月幌甘,...
    朝霞初染閱讀 424評論 0 1