報文分為請求報文與響應(yīng)報文,除開報文實體的差異之外,兩者的報文首部內(nèi)容上也不盡相同。下圖是訪問www.baidu.com的報文首部截圖:
可見俭厚,請求報文首部第一行是由“請求方法+協(xié)議及其版本”組成的請求行,響應(yīng)報文首部的第一行則是“狀態(tài)碼+協(xié)議及其版本組成的”狀態(tài)行驶臊。此外挪挤,包含各種首部字段的HTTP首部字段行也是有差別的叼丑,一般將HTTP首部字段語句分為:通用首部字段、請求首部字段扛门、響應(yīng)首部字段鸠信、實體首部字段。所有的字段格式都是“key:value”這種形式尖飞,如果value值有多個症副,中間用逗號隔開店雅。接下來政基,來具體介紹首部字段的各種屬性值:
通用首部字段
即,響應(yīng)報文和請求報文中均可以存在的首部字段闹啦,具體包括:
1.Cache-Control
:
用以操縱緩存的工作機制沮明,雖為通用首部字段,但其參數(shù)指令在請求報文首部與響應(yīng)報文首部略有不同:
-
pubulic/private
:這是兩個只存在于響應(yīng)報文之中的功能相反的指令窍奋,pubulic代表可向任意方提供緩存荐健,而private只能向特定用戶提供緩存。 -
no-cache
:防止從緩存中獲取過期資源琳袄。
若請求中包含該指令:則表示客戶端不會接收緩存過的響應(yīng)江场,緩存服務(wù)器會將請求直接轉(zhuǎn)發(fā)給源服務(wù)器;
若響應(yīng)中包含該指令:緩存服務(wù)器則不能對資源進行緩存窖逗,且源服務(wù)器將不再對緩存服務(wù)器中提出的請求進行有效性確認址否,禁止其進行緩存操作。 -
no-store
:暗示請求或響應(yīng)中包含機密內(nèi)容碎紊,禁止緩存佑附。實際上該指令比no-cache
更加強硬,是真正的禁止緩存仗考。 -
no-transform
:規(guī)定緩存不能改變實體主體的媒體類型音同。 -
max-age
:形如Cache-Control:max-age:60000
,其中的數(shù)字單位為秒秃嗜。
若請求中包含該指令:表示緩存的時間若比該時間小权均,則加載緩存。故當(dāng)max-age的值為0時锅锨,緩存服務(wù)器會直接將請求轉(zhuǎn)發(fā)給源服務(wù)器螺句。
若響應(yīng)中包含該指令:緩存服務(wù)器將不再對資源的有效性進行確認,以max-age的數(shù)值來代表資源保存的最長緩存時間橡类,其優(yōu)先級是高于Expires的蛇尚; -
min-fresh
:形如Cache-Control:min-fresh:60000
,其中的數(shù)字單位為秒顾画。表示過了XX秒后的資源都無法作為緩存返回取劫。 -
max-stale
:形如Cache -Control:max-stale:60000
匆笤,其中的數(shù)字單位為秒。表示只要處于max-stale的時間范圍內(nèi)谱邪,無論緩存是否過期都會照常接收炮捧。若無值,則表示無限期接收緩存惦银。
PS:min-fresh
與max-stale
構(gòu)成了非常規(guī)處理緩存的上下限咆课。 -
must-revalidate
:代理會向源服務(wù)器再次驗證即將返回的響應(yīng)緩存是否有效,這是最高優(yōu)先級的指令扯俱,會自動忽略max-stale
书蚪。
2.Conection
:
兩個作用,其一是控制不再轉(zhuǎn)發(fā)的首部字段名迅栅;其二是管理持久連接殊校。
-
控制不再轉(zhuǎn)發(fā)的首部字段名
如圖所示,Connection:upgrade
控制了名為Upgrade的首部字段读存,只讓代理服務(wù)其接收該字段为流,代理轉(zhuǎn)發(fā)過程中刪除了有關(guān)Upgrade的語句。 管理持久連接
共有兩個參數(shù):close
/keep-alive
让簿,前者表示斷開連接敬察,后者表示保持持久連接。
3.Data
:
表示該HTTP報文所創(chuàng)立的日期與時間尔当。
4.Trailer
:
事先說明在報文主體后記錄了哪些首部字段莲祸。
5.Transfer-Encodding
:
規(guī)定了傳輸報文主體時采用何種編碼形式。
6.Upgrade
:
用以檢測HTTP協(xié)議及其它協(xié)議是否可使用更高版本進行通信居凶,其參數(shù)可以指定一個完全不同的通信協(xié)議虫给,如:Upgrade: TSL/1.0,HTTP/1.1
侠碧。
7.Via
:
用于記錄經(jīng)過代理服務(wù)器的轉(zhuǎn)發(fā)情況抹估,常與Trace
方法一塊使用。
8.Warning
:
警告弄兜!
請求報文首部字段
請求報文首部字段意為只有請求報文特有的药蜻,只會出現(xiàn)在請求報文中的首部字段。用于補充請求的附加信息替饿,客戶端信息 以及對響應(yīng)內(nèi)容的優(yōu)先級等等语泽。
1.Accept
:
Accept字段可以告知服務(wù)器,用戶代理能夠處理的媒體類型及其優(yōu)先級视卢,可用type/subtype的這種形式來一次指定多個媒體類型踱卵,如:
- 文本文件
text/html
,text/js
,text/css
application/xhtml+xml,application/xml
- 圖片文件
image/gif
,image/jpeg
,image/png
- 視頻文件
video/mpeg
,video/quicktime
- 二進制文件
application/octec-stream
,application/zip
若想要給顯示的媒體類型添加優(yōu)先級,則使用 q=(0~1)來表示權(quán)重值惋砂,當(dāng)服務(wù)器提供多種內(nèi)容時妒挎,將會首先返回權(quán)重值最高的媒體類型。
2.Accept-Charset/Accept-Encoding/Accept-Language
:
這三個分別表示通知服務(wù)器用戶代理所能支持的字符集/編碼類型/以及支持的語言西饵。同樣的他們也能用q=(0~1)來表示優(yōu)先級酝掩。
3.Authorization
:
告知服務(wù)器,用戶代理的認證登錄信息眷柔,是服務(wù)器返回401狀態(tài)碼用戶登錄后期虾,給請求添加的登錄信息,現(xiàn)在基本上不會使用這種方法驯嘱。
4.From
:
來告知服務(wù)器用戶的郵箱镶苞,僅僅是留下一個聯(lián)系方式。
5.Host
:
它將告知服務(wù)器宙拉,請求的資源所處的互聯(lián)網(wǎng)主機名和端口號宾尚,Host首部字段是HTTP/1.1規(guī)范中唯一一個必須包含在請求首部內(nèi)的首部字段丙笋。由于一個IP地址下可能存在多個域名谢澈,所以需要Host來告訴服務(wù)器具體請求的是哪個資源。
6.Range
:
范圍請求御板,告知服務(wù)器索取資源的范圍锥忿。如:Range: bytes = 5000-10000
意為請求獲取從第5000個字節(jié)到10000個字節(jié)的資源。若獲取成功怠肋,會拋出206,返回范圍資源;失敗施逾,則拋出200邦鲫,返回所有資源。
7.If-Match/If-Modified-Since/If-None-Match/If-Range/If-Unmodified-Since
:
形如If-xxx
的這種請求首部字段稱為條件請求杈抢,意為服務(wù)器只有滿足條件請求的內(nèi)容数尿,才會執(zhí)行請求。
-
If-Match
:只有它的值與想要獲取資源的實體標(biāo)記(Etag)值相等時惶楼,服務(wù)器才會返回資源右蹦。 -
If-Modified-Since
:如果在該字段指定的時間早于資源更新時間,則處理該請求歼捐。反之何陆,則拋出304,使用緩存即可豹储。 -
If-Range
:范圍請求贷盲,與Range字段一同使用。如果其值與實體標(biāo)記(Etag)值相等剥扣,則返回指定的范圍資源巩剖。若不等慨灭,則拋出200,返回所有資源球及。 -
If-None-Match/If-Unmodified-Since
:If-Match/If-Modified-Since
否定方法氧骤。
8.Max-Forwards
:通過TRACE方法或OPTIONS方法時,發(fā)送包含字段請求時吃引,將以十進制形式指定經(jīng)過服務(wù)器的最大數(shù)目筹陵。例如:Max-Forwards:3
,規(guī)定經(jīng)過服務(wù)器數(shù)目為3镊尺,沒經(jīng)過一個服務(wù)器其值將會-1朦佩,當(dāng)其值為0時,所在服務(wù)器強制返回響應(yīng)庐氮。
9.Refer
:
告知服務(wù)器請求原始資源的URL语稠,出于安全性考慮也可以考慮不發(fā)送該字段。
10.TE
:
告知服務(wù)器客戶端能夠處理的傳輸編碼方式及其優(yōu)先級弄砍,他與Accept-Encoding很像仙畦,但僅用于傳輸編碼。
11.User-Agent
:該字段會將創(chuàng)建請求的瀏覽器及用戶代理等信息傳達個服務(wù)器音婶。