HTTP報文首部
??HTTP協(xié)議的請求和響應(yīng)報文中必定包含HTTP首部。首部內(nèi)容為客戶端和服務(wù)器分別處理請求和響應(yīng)提供所需要的信息损离。
HTTP請求報文
??在請求中僻澎,HTTP報文由方法十饥、URI逗堵、HTTP版本蜒秤、HTTP首部字段等部分構(gòu)成作媚。HTTP響應(yīng)報文
??在相應(yīng)中漂问,HTTP報文由HTTP版本级解、狀態(tài)碼(數(shù)字和原因短語)勤哗、HTTP首部字段3部分構(gòu)成芒划。??在報文眾多的字段中民逼,HTTP首部字段包含的信息最為豐富笑诅。首部字段同時存在于請求和響應(yīng)報文內(nèi)吆你,并涵蓋HTTP報文相關(guān)的內(nèi)容信息妇多。
HTTP首部字段
傳遞重要信息
??使用首部字段是為了給瀏覽器和服務(wù)器提供報文主體大小者祖、所使用的語言七问、認(rèn)證信息等內(nèi)容烂瘫。
HTTP首部字段結(jié)構(gòu)
??由首部字段名和字段值構(gòu)成的坟比,中間用冒號分隔。
??另外籍琳,字段值對應(yīng)單個HTTP首部字段可以有多個值趋急,如下所示:
??Keep-Alive:timeout=15呜达,max=100
??若HTTP報文首部中出現(xiàn)了兩個或兩個以上具有相同首部字段名時查近,根據(jù)瀏覽器內(nèi)部處理邏輯的不同霜威,結(jié)果可能不一致戈泼。
4種HTTP首部字段類型
根據(jù)實際用途分為:
- 通用首部字段:請求報文和響應(yīng)報文兩方都會使用的首部
- 請求首部字段:補充了請求的附加內(nèi)容谈宛、客戶端信息、響應(yīng)內(nèi)容相關(guān)優(yōu)先級等信息
- 響應(yīng)首部字段:補充了響應(yīng)的附加內(nèi)容琼牧,也會要求客戶端附加額外的內(nèi)容信息
- 實體首部字段:針對請求報文和響應(yīng)報文的實體部分使用的首部巨坊。補充了資源內(nèi)容更新時間等與實體有關(guān)的信息
HTTP/1.1首部字段
-
通用首部字段
-
請求首部字段
-
響應(yīng)首部字段
-
實體首部字段
非HTTP/1.1首部字段
Cookie共啃、Set-Cookie和Content-Disposition等在其他RFC中定義的首部字段究珊,使用頻率也很高剿涮。
End-to-end首部和Hop-by-hop首部
??HTTP首部字段將定義成緩存代理和非緩存代理的行為取试,分成2種類型瞬浓。
- 端對端首部:分在此類別中的首部會轉(zhuǎn)發(fā)給請求/響應(yīng)對應(yīng)的最終接收目標(biāo)瑟蜈,且必須保存在有緩存生成的響應(yīng)中铺根,另外規(guī)定它必須被轉(zhuǎn)發(fā)访雪。
- 逐跳首部:分在此類別中的首部只對單次轉(zhuǎn)發(fā)有效臣缀,會因通過緩存或代理而不再轉(zhuǎn)發(fā)精置。HTTP/1.1和之后版本脂倦,如果要使用hop-by-hop首部赖阻,需提供Conection首部字段火欧。
下面列舉出HTTP/1.1中的逐跳首部字段苇侵。除了這8個首部字段之外衅檀,其他所有字段都屬于端到端首部。
- Connection
- Keep-Alive
- Proxy-Authenticate
- Proxy-Authorization
- Trailer
- TE
- Transfer-Encoding
- Upgrade
HTTP/1.1通用首部字段
Cache-Control
能操作緩存的工作機制杉适。(指令的參數(shù)是可選的猿推,多個指令之間通過‘蹬叭,’分隔)首部字段Cache-Control的指令可用于請求及響應(yīng)時孽查。
- 表示是否能緩存的指令
- public:明確表示其他用戶也可利用緩存
- private:當(dāng)指定private指令后,響應(yīng)只以特定的用戶作為對象梦碗。緩存服務(wù)器會對該特定用戶提供資源緩存的服務(wù)。
- no-cache:防止從緩存中返回過期的資源
客戶端發(fā)送的請求中包含no-cache指令,表示客戶端將不會接收緩存過的響應(yīng)巨柒。“中間”的緩存服務(wù)器必須把客戶端請求轉(zhuǎn)發(fā)給源服務(wù)器牺勾。
服務(wù)器返回的響應(yīng)中包含no-cache驻民,那么緩存服務(wù)器不能對資源進(jìn)行緩存回还,源服務(wù)器以后也將不再對緩存服務(wù)器請求中提出的資源有效性進(jìn)行確認(rèn),且禁止其對響應(yīng)資源進(jìn)行緩存操作蝗柔。
Cache-Control: no-cache=Location
有服務(wù)器返回的響應(yīng)中癣丧,若對no-cache字段名具體指定參數(shù)值竟痰,那么客戶端在接收到這個被指定參數(shù)值的首部字段對應(yīng)的響應(yīng)報文后坏快,就不能使用緩存莽鸿。換言之,無參數(shù)值的首部字段可以使用緩存级及。只能在相應(yīng)指令中指定該參數(shù)饮焦。
- 控制可執(zhí)行緩存的對象的指令
- no-store:暗示請求(和對應(yīng)的響應(yīng))或響應(yīng)中包含機密信息。因此硼啤,該指令規(guī)定緩存不能在本地存儲請求或響應(yīng)的任意部分。
- 指定緩存期限和認(rèn)證的指令
- s-maxage:其功能和max-age指令的相同(單位是s)亏镰,不同點是s-maxage指令只適用于供多位用戶使用的公共緩存服務(wù)器索抓。也就是說耸黑,對于向同一用戶重復(fù)返回響應(yīng)的服務(wù)器來說大刊,這個指令沒有任何作用。
另外伴郁,當(dāng)使用s-maxage指令后焊傅,則直接忽略對Expores首部字段及max-age指令的處理。 - max-age:當(dāng)客戶端發(fā)送的請求中包含max-age指令時握巢,如果判定緩存資源的緩存時間數(shù)值比指定時間的數(shù)值更小,那么客戶端就接收緩存的資源。另外带射,當(dāng)指定max-age值為0,那么緩存服務(wù)器通常需要將請求轉(zhuǎn)發(fā)給源服務(wù)器灿里。
當(dāng)服務(wù)器返回的響應(yīng)中包含max-age指令時,緩存服務(wù)器將不對資源的有效性再作確認(rèn)色鸳,而max-age數(shù)值代表資源保存為緩存的最長時間命雀。
應(yīng)用HTTP/1.1版本的緩存服務(wù)器遇到同時存在Expries首部字段的情況時撵儿,會優(yōu)先處理max-age指令,而忽略掉Expries房匆。但是HTTP/1.0版本的緩存服務(wù)器的情況卻相反浴鸿。 - min-fresh:要求緩存服務(wù)器返回至少還未過指定時間(單位s)的緩存資源。比如掸哑,當(dāng)指定min-fresh為60秒后,過了60秒的資源都無法作為響應(yīng)返回了摔癣。
- max-stale:可指示緩存資源择浊,即使過期也照常接收。如果指令為指定參數(shù)值逾条,那么無論經(jīng)過多久琢岩,客戶端都會接收響應(yīng)。如果指定了具體數(shù)值师脂,那么即使過期担孔,只要仍處于max-stale指定的事件內(nèi),依舊會被客戶端接收攒磨。
- only-if-cached:表示客戶端僅在緩存服務(wù)器本地緩存目標(biāo)資源的情況下才會要求其返回泳桦。換句話說,該指令要求緩存服務(wù)器不重新加載響應(yīng)娩缰,也不會再次確認(rèn)資源有效性灸撰。若發(fā)生請求緩存服務(wù)器的本地緩存無響應(yīng),則返回狀態(tài)碼504 Gateway Timeout
- must-revalidate:使用該指令拼坎,代理會向源服務(wù)器再次驗證即將返回的響應(yīng)緩存目前是否仍然有效浮毯。若無法連通源服務(wù)器再次獲取有效資源的話,緩存必須給客戶端一條504狀態(tài)碼泰鸡。
另外债蓝,使用must-revalidate會忽略請求的max-stale指令。 - proxy-revalidate:要求所有的緩存服務(wù)器在接收到客戶端帶有該指令的請求返回響應(yīng)之前盛龄,必須再次驗證緩存的有效性饰迹。
- no-transform:無論在請求還是響應(yīng)中,緩存都不能改變實體主體的媒體類型余舶,這樣可以防止緩存或代理圖片等類似操作啊鸭。
- Cache-Control拓展:
cache-extension token
Cache-Control:private,community="UCI"
通過cache-extension標(biāo)記匿值,可以拓展Cache-Contril首部字段內(nèi)的指令赠制。但是,extension tokens僅對能理解它的緩存服務(wù)器來說是有意義的挟憔。
Connection
- 控制不再轉(zhuǎn)發(fā)給代理的首部字段
在客戶端發(fā)送請求和服務(wù)器返回響應(yīng)內(nèi)钟些,使用Connection首部字段,可控制不再轉(zhuǎn)發(fā)給代理的首部字段(即Hop-by-hop首部)绊谭。 - 管理持久連接
HTTP/1.1版本的默認(rèn)連接都是持久連接政恍。當(dāng)服務(wù)器想明確斷開連接時,則指定Connection首部字段的值為Close达传。
HTTP/1.1之前的HTTP版本的默認(rèn)連接都是非持久連接篙耗,則需要指定Connection首部字段的值為Keep-Alive。
Date
表示創(chuàng)建HTTP報文的日期和時間
Pragma
Pragma是HTTP/1.1之前版本的歷史遺留字段趟大,僅作為與HTTP/1.0的向后兼容而定義。
形式唯一:Pragma:no-cache
該首部字段屬于通用首部字段铣焊,但只用在客戶端發(fā)送的請求中逊朽。客戶端會要求所有的中間服務(wù)器不返回緩存的資源曲伊。
Trailer
會事先說明在報文主體后記錄了哪些首部字段叽讳。該首部字段可應(yīng)用在HTTP/1.1版本分塊傳輸編碼時追他。Transfer-Encoding
規(guī)定傳輸報文主體時采用的編碼方式
Upgrade
用于檢測HTTP協(xié)議及其他協(xié)議是否可使用更高的版本進(jìn)行通信,其參數(shù)值可以用來指定一個完全不同的通信協(xié)議岛蚤。使用首部字段Upgrade時邑狸,還需要額外指定Connection:Upgrade。
Via
為了追蹤客戶端與服務(wù)器之間的請求和響應(yīng)報文的傳輸路徑涤妒。
報文經(jīng)過代理或網(wǎng)關(guān)時单雾,會先在首部字段Via中附加該服務(wù)器的信息仇穗,然后再進(jìn)行轉(zhuǎn)發(fā)筝野。首部字段Via不僅用于追蹤報文的轉(zhuǎn)發(fā),還可避免請求回環(huán)的發(fā)生昭灵。所以必須在經(jīng)過代理時附加該首部字段內(nèi)容贿讹。
Via首部是為了追蹤傳輸路徑渐逃,所以經(jīng)常會和TRACE方法一起使用。
Warning
HTTP/1.1的Warning首部是從HTTP/1.0的響應(yīng)首部(Retry-After)演變過來的民褂。該首部通常會告知用戶一些與緩存相關(guān)的問題的警告茄菊。請求首部字段
Accept
該字段可通知服務(wù)器,用戶代理能夠處理的媒體類型及媒體類型的相對優(yōu)先級赊堪∶嬷常可使用type/subtype這種形式,一次指定多種媒體類型雹食。若想給顯示的媒體類型增加優(yōu)先級畜普,則使用q=來額外表示權(quán)重值,用分號(群叶;)進(jìn)行分隔吃挑。權(quán)重值q的范圍是0~1(可精確到小數(shù)點后三位),默認(rèn)權(quán)重為1=1.0.
當(dāng)服務(wù)器提供多種內(nèi)容時街立,將會首先返回權(quán)重值最高的媒體類型舶衬。
Accept-Charset
用來通知服務(wù)器用戶代理支持的字符集及字符集的相對優(yōu)先級。同樣可以指定多種字符集赎离,也可使用權(quán)重q值表示相對優(yōu)先級逛犹。
Accept-Encoding
用來告知服務(wù)器用戶代理支持的內(nèi)容編碼及內(nèi)容編碼的優(yōu)先級順序,可一次性指定多種內(nèi)容編碼梁剔。同樣可以用權(quán)重q值表示相對優(yōu)先級虽画,也可以使用*作為通配符。
Accept-Language
告知服務(wù)器用戶代理能夠處理的自然語言集及其優(yōu)先級码撰,可一次指定多種語言集柴梆,權(quán)重q值表示相對優(yōu)先級揣苏。
Authorization
告知服務(wù)器,用戶代理的認(rèn)證信息(證書值)涡扼。通常票彪,想要通過服務(wù)器認(rèn)證的用戶代理會在接收到返回的401狀態(tài)碼響應(yīng)后推掸,把首部字段Authorization加入請求中毡泻。共用緩存在接收到含有Authorization首部字段的請求時的操作處理會略有差異邪铲。
Expect
客戶端使用首部字段Expect告知服務(wù)器揽惹,期望出現(xiàn)的某種特定行為疯溺。因服務(wù)器無法理解客戶端的期望作出回應(yīng)而發(fā)生錯誤時墨闲,會返回狀態(tài)碼417Expectation Failed杆兵。
客戶端可以利用該首部字段,寫明所期望的拓展格侯。雖然HTTP/1.1規(guī)范只定義了100-continue(狀態(tài)碼100 Continue)鼻听。
等待狀態(tài)碼100響應(yīng)的客戶端在發(fā)生請求時财著,需要指定Expect:100-continue。
From
告知服務(wù)器使用用戶代理的用戶的電子郵件地址撑碴。通常撑教,其使用目的就是為了顯示搜索引擎等用戶代理的負(fù)責(zé)人的電子郵件聯(lián)系方式。使用代理時醉拓,應(yīng)盡可能包含在From首部字段伟姐。(但可能會因為代理不同,將電子郵件地址記錄在User-agent首部字段內(nèi))亿卤。
Host
虛擬主機運行在同一個IP上愤兵,因此使用首部字段Host加以區(qū)分。
首部字段Host會告知服務(wù)器排吴,請求的資源所處的互聯(lián)網(wǎng)主機名和端口號秆乳。Host首部字段在HTTP/1.1規(guī)范內(nèi)是唯一一個必須被包含在請求內(nèi)的首部字段。
請求被發(fā)送至服務(wù)器時钻哩,請求中的主機名會用IP地址直接替換解決矫夷。若服務(wù)器未設(shè)定主機名,那直接發(fā)送一個空值即可憋槐。
If-Match
形如If-xxx這種樣式的請求首部字段双藕,都可稱為條件請求。服務(wù)器接收到附帶條件的請求后阳仔,只有判斷指定條件為真時忧陪,才會執(zhí)行請求。首部字段If-Match近范,屬附帶條件之一嘶摊,它會告知服務(wù)器匹配資源所用的實體標(biāo)記(Etag)值。這時的服務(wù)器無法使用若Etag值评矩。還可以使用*指定其字段值叶堆。針對這種情況,服務(wù)器將會忽略Etag的值斥杜,只要資源存在就處理請求虱颗。
If-Modified-Since
它會告知服務(wù)器,若If-Midified-Since字段值早于資源的更新時間蔗喂,則希望能處理該請求忘渔。而在指定If-modified-Since字段值的日期時間之后,如果請求的資源都沒有更新缰儿,則返回狀態(tài)碼304Not Modified的響應(yīng)畦粮。
If-Modified-Since 用于確認(rèn)代理或客戶端擁有的本地資源的有效性。獲取資源的更新日期時間, 可通過確認(rèn)首部字段 Last-Modified 來確定宣赔。
If-None-Match
在GET或HEAD方法中使用首部字段If-None-Match可獲取最新的資源预麸。
If-Range
下面那種方式需要發(fā)送兩次請求。
If-Unmodified-Since
與首部字段If-Modified-Since作用相反儒将。它的作用的是告知服務(wù)器师崎, 指定的請求資源只有在字段值內(nèi)指定的日期時間之后, 未發(fā)生更新的情況下椅棺, 才能處理請求。 如果在指定日期時間后發(fā)生了更新齐蔽, 則以狀態(tài)碼 412 Precondition Failed 作為響應(yīng)返回两疚。
Max-Forwards
通過TRACE方法或OPTIONS方法,發(fā)送包含首部字段Max-Forwards收到的請求時含滴,該字段以十進(jìn)制整數(shù)形式指定可經(jīng)過的服務(wù)器最大數(shù)目诱渤。
使用 HTTP 協(xié)議通信時, 請求可能會經(jīng)過代理等多臺服務(wù)器谈况。 途中勺美,如果代理服務(wù)器由于某些原因?qū)е抡埱筠D(zhuǎn)發(fā)失敗, 客戶端也就等不到服務(wù)器返回的響應(yīng)了碑韵。 對此赡茸, 我們無從可知∽N牛可以靈活使用首部字段 Max-Forwards占卧, 針對以上問題產(chǎn)生的原因展開調(diào)查。 由于當(dāng) Max-Forwards 字段值為 0 時联喘, 服務(wù)器就會立即返回響應(yīng)华蜒, 由此我們至少可以對以那臺服務(wù)器為終點的傳輸路徑的通信狀況有所把握。
Proxy-Authorization
接受到從代理服務(wù)器發(fā)來的認(rèn)證質(zhì)詢時豁遭,客戶端會發(fā)送包含該首部字段的請求叭喜,已告知服務(wù)器認(rèn)證所需要的信息。
這個行為是與客戶端和服務(wù)器之間的 HTTP 訪問認(rèn)證相類似的蓖谢, 不同之處在于捂蕴, 認(rèn)證行為發(fā)生在客戶端與代理之間。 客戶端與服務(wù)器之間的認(rèn)證闪幽, 使用首部字段 Authorization 可起到相同作用启绰。
Range
對于只需要獲取部分資源的范圍請求,包含首部字段Range即可告知服務(wù)器資源的指定范圍沟使。
Referer
客戶端一般都會發(fā)送Referer首部字段給服務(wù)器委可。但當(dāng)直接在瀏覽器地址輸入URI(可能含有ID和密碼等保密信息),出于安全性的考慮,也可以不發(fā)送該首部字段着倾。
TE
告知服務(wù)器客戶端能夠處理相應(yīng)的傳輸編碼方式及相對優(yōu)先級拾酝。它和首部字段Accept-Encoding的功能很像,但是用于傳輸編碼卡者。
首部字段TE出指定傳輸編碼之外蒿囤,還可以指定伴隨trailer字段的分塊傳輸編碼的方式。應(yīng)用后者時崇决,只需把trailers賦值給該字段值材诽。
User-Agent
將創(chuàng)建請求的瀏覽器和用戶代理名稱等信息傳達(dá)給服務(wù)器。
由網(wǎng)絡(luò)爬蟲發(fā)起請求時恒傻, 有可能會在字段內(nèi)添加爬蟲作者的電子郵件地址脸侥。 此外, 如果請求經(jīng)過代理盈厘, 那么中間也很可能被添加上代理服務(wù)器的名稱睁枕。
響應(yīng)首部字段
Accept-Ranges
告知客戶端服務(wù)器是否能處理范圍請求,以指定獲取服務(wù)器daunt某個資源沸手。字段值有兩種外遇,可處理范圍請求時為bytes,反之為none契吉。
Age
告知客戶端跳仿,源服務(wù)器在多久前創(chuàng)建了響應(yīng)。字段值單位為秒捐晶。若創(chuàng)建該響應(yīng)的服務(wù)器是緩存服務(wù)器塔嬉,Age值是指緩存后的響應(yīng)再次發(fā)起認(rèn)證到認(rèn)證完成的時間值。創(chuàng)建代理響應(yīng)時必須加上該字段租悄。
Etag
告知客戶端實體標(biāo)識谨究。它是一種可將資源以字符串形式做唯一性標(biāo)識的方式。服務(wù)器會為每份資源分配對應(yīng)的Etag值泣棋。
當(dāng)資源更新胶哲,Etag值也需要更新,其算法規(guī)則潭辈,僅僅是由服務(wù)器來分配鸯屿。
資源被緩存時,就會被分配唯一性標(biāo)識把敢,中文版和英文版瀏覽器返回的資源不一樣寄摆,所以僅憑URI指定緩存的資源是相當(dāng)困難的。
- 強Etag值:不論實體發(fā)生多么細(xì)微的變化都會改變其值修赞。
- 弱Etag值:只用于提示資源是否相同婶恼。只有資源發(fā)生了根本改變桑阶,產(chǎn)生差異時才會改變Etag值。這時會在字段值最開始處附加W/勾邦。
Location
將響應(yīng)接收方引導(dǎo)至某個與請求URI位置不同的資源蚣录。基本上該字段會配合3xx:Redirection的響應(yīng)眷篇,提供重定向的URI萎河。
幾乎所有的瀏覽器在接收到包含首部字段Location的響應(yīng)后,都會強制性的嘗試對已提示的重定向資源的訪問蕉饼。
Proxy-Authenticate
把由代理服務(wù)器所要求的認(rèn)證信息發(fā)送給客戶端虐杯。
Retry-After
告知客戶端應(yīng)該在多久之后再次發(fā)送請求。主要配合狀態(tài)碼503 Service Unavailable響應(yīng)昧港,或3xx Redireact響應(yīng)一起使用擎椰。
字段值可以指定為具體的日期時間(Wed, 04 Jul 2012 06: 34: 24GMT 等格式),也可以是創(chuàng)建響應(yīng)后的秒數(shù)慨飘。
Server
告知客戶端當(dāng)前服務(wù)器上安裝的HTTP服務(wù)器應(yīng)用程序的信息。
Vary
可對緩存進(jìn)行控制译荞。源服務(wù)器會向代理服務(wù)器傳達(dá)關(guān)于本地緩存使用方法的命令瓤的。
從代理服務(wù)器接收到源服務(wù)器返回包含Vary指定項的響應(yīng)之后,若要再進(jìn)行緩存吞歼,僅對請求中含有相同Vary指定首部字段的請求返回緩存圈膏。即使對相同資源發(fā)起請求,但由于Vary指定的首部字段不相同篙骡,因此必須要從源服務(wù)器重新獲取資源稽坤。
WWW-Authenticate
用于HTTP訪問認(rèn)證。告知客戶端適用于訪問請求URI所指定資源的認(rèn)證方案和帶參數(shù)提示的質(zhì)詢糯俗。狀態(tài)碼401 Unauthorized響應(yīng)中尿褪,肯定帶有該首部字段。
實體首部字段
包含在請求報文和響應(yīng)報文中的實體部分所使用的首部得湘,用于補充內(nèi)容的更新時間等與實體相關(guān)的信息杖玲。
Allow
通知客戶端能夠支持Request-URI指定資源的所有HTTP方法。當(dāng)服務(wù)器收到不支持的HTTP方法時淘正,會以狀態(tài)碼405Method Not Allowed作為響應(yīng)返回摆马。與此同時,還會把所有能支持的HTTP方法寫入首部字段Allow后返回鸿吆。
Content-Encoding
告知客戶端服務(wù)器對實體的主體部分選用的內(nèi)容編碼方式囤采。內(nèi)容編碼是指不丟失實體信息的前提下所進(jìn)行的壓縮。
Content-Language
告知客戶端惩淳,實體主體使用的自然語言蕉毯。
Content-Length
表明實體主體部分的大小(單位字節(jié))。對實體主體進(jìn)行內(nèi)容編碼傳輸時恕刘,不能再使用Content-Length首部字段缤谎。
Content-Location
給出與報文主體部分相對應(yīng)的URI。和首部字段Location不同褐着,其表示的是報文主體返回資源對應(yīng)的URI坷澡。
Content-MD5
是一串由MD5算法生成的值,其目的在于檢查報文主體在傳輸過程中是否保持完整含蓉,以及確認(rèn)傳輸?shù)竭_(dá)频敛。(HTTP首部無法記錄二進(jìn)制值,通過Base64編碼處理)
Content-Range
告知客戶端作為響應(yīng)返回的實體的哪個部分符合范圍請求馅扣。字段值以字節(jié)為單位斟赚,表示當(dāng)前發(fā)送部分及整個實體大小。
Content-Type
說明了實體主體內(nèi)對象的媒體類型差油。和首部字段Accept一樣拗军,字段值用type/subtype形式賦值。
Expires
將資源失效的日期告知客戶端蓄喇。緩存服務(wù)器在接收到含有首部字段Expires的響應(yīng)后发侵,會以緩存來應(yīng)答請求,在Expires字段值指定的時間之前妆偏,響應(yīng)的副本會一直保存刃鳄。當(dāng)超過指定的時間后,會轉(zhuǎn)向源服務(wù)器請求資源钱骂。
源服務(wù)器不希望緩存服務(wù)器對資源緩存時叔锐,最好在該字段內(nèi)寫入與首部字段Date相同的時間值。
但是见秽,當(dāng)首部字段Cache-Control有指定max-age指令時愉烙,比起該字段,會優(yōu)先處理max-age指令解取。
Last-Modified
指明資源最終修改的時間齿梁。一般來說,這個值就是Request-URI指定資源被修改的時間肮蛹。但類似使用CGI腳本進(jìn)行動態(tài)數(shù)據(jù)處理時勺择,該值有可能會變成數(shù)據(jù)最終修改時的時間。
為Cookie服務(wù)的首部字段
??Cookie的工作機制是用戶識別及狀態(tài)管理伦忠。Web網(wǎng)站為了管理用戶的狀態(tài)會通過Web瀏覽器省核,把一些數(shù)據(jù) 臨時寫入用戶的計算機內(nèi)。接著當(dāng)用戶訪問該Web網(wǎng)站時昆码,可通過通信方式取回之前發(fā)放的Cookie气忠。
Set-Cookie
當(dāng)服務(wù)器準(zhǔn)備開始管理客戶端的狀態(tài)時宦赠,會事先告知各種信息。- expires:指定瀏覽器可發(fā)送Cookie的有效期米母。當(dāng)省略時勾扭,其有效期僅限于維持瀏覽器會話時間段內(nèi)。這通常限于瀏覽器應(yīng)用程序被關(guān)閉之前铁瞒。
??另外妙色,一旦Cookie從服務(wù)器發(fā)送至客戶端,服務(wù)器就不存在可以顯示刪除Cookie的方法慧耍。但可通過覆蓋已過期的Cookie身辨,實現(xiàn)對客戶端Cookie的實質(zhì)性刪除操作。 - path:用于限制指定Cookie的發(fā)送范圍的文件目錄芍碧。不過有辦法避開此限制煌珊。
- domain:指定的域名可做到與結(jié)尾匹配一致。比
如师枣, 當(dāng)指定 example.com 后怪瓶, 除 example.com 以外萧落, www.example.com或 www2.example.com 等都可以發(fā)送 Cookie践美。 - secure:用于限制Web頁面盡在HTTPS安全連接時,才可以發(fā)送Cookie找岖。
發(fā)送Cookie時陨倡,指定secure屬性的方法如下:
Set-Cookie:name=value;secure
??當(dāng)省略secure屬性時许布,不論HTTP還是HTTPS兴革,都會對Cookie進(jìn)行回收。
- HttpOnly:是Cookie的拓展功能蜜唾,它使JS腳本無法獲得Cookie杂曲。其主要目的為防止跨站腳本攻擊對Cookie的信息竊取。
發(fā)送指定 HttpOnly 屬性的 Cookie 的方法如下所示:
Set-Cookie: name=value; HttpOnly
Cookie
Cookie:status=enable
告知服務(wù)器袁余,當(dāng)客戶端想獲得HTTP狀態(tài)管理支持時擎勘,就會在請求中包含從服務(wù)器接收到的Cookie。接收到多個Cookie時颖榜,同樣可以以多個Cookie形式發(fā)送棚饵。
其他首部字段
HTTP首部字段是可以自行拓展的煤裙。所以在Web服務(wù)器和瀏覽器的應(yīng)用上,會出現(xiàn)各種非標(biāo)準(zhǔn)的首部字段噪漾。
X-Frame-Options
屬于HTTP響應(yīng)首部硼砰,用于控制網(wǎng)站內(nèi)容在其他Web網(wǎng)站的Frame標(biāo)簽內(nèi)的顯示問題。其主要目的是為了防止點擊劫持攻擊欣硼。
可指定的字段值:
- DENY:拒絕
- SAMEORIGIN:僅同源域名下的頁面匹配時許可
現(xiàn)在主流的瀏覽器都已經(jīng)支持题翰。
####### X-XSS-Protection
屬于HTTP響應(yīng)首部,它是針對跨站腳本攻擊(XSS)的一種對策分别,用于控制瀏覽器XSS防護機制的開關(guān)遍愿。
可指定的字段值: - 0:將XSS過濾設(shè)置成無效狀態(tài)
- 1:將XSS過濾設(shè)置成有效狀態(tài)
DNT
屬于HTTP請求首部,是Do Not Track的簡稱耘斩,意為拒絕個人信息被收集沼填,是表示拒絕被精準(zhǔn)廣告追蹤的一種方法。
可指定的字段值:
- 0:同意被追蹤
- 1:拒絕被追蹤
Web服務(wù)器需要對DNT做對應(yīng)的支持
p3p
屬于HTTP響應(yīng)