1,Cache-Control字段緩存
經過指定首部字段Cache-Control的指令,就能操做緩存的工做機制。指令的參數是可選的,多個指令之間經過逗號「,」分隔。該指令可用於請求及響應時。服務器
可用的指令按請求和響應兩種分類以下:編碼
緩存請求指令代理
緩存響應指令orm
可用的指令中具體分析以下:對象
(1)表示是否能緩存的指令token
Cache-Control:public圖片
當指定使用public指令時,則明確代表其餘用戶也可利用緩存。資源
Cache-Control:privateit
當指定使用private指令時,響應只以特定的用戶做爲對象,這與public正好相反。
Cache-Control:no-cache
使用no-cache指令的目的是爲了防止從緩存中返回過時的資源。若是客戶端發送的請求中包含,則表示客戶端將不會接收緩存過的響應。緩存服務器必須把客戶端請求轉發給源服務器。若是服務器返回的響應中包含,那麼緩存服務器不能對資源進行緩存,源服務器之後也將再也不對緩存服務器請求中提出的資源有效性進行確認,且禁止其對響應資源進行緩存操做。
Cache-Control:no-cache=Location
由服務器返回的響應中,若是報文首部字段Cache-Control中對no-cache字段名具體指定了參數值,那麼客戶端在接收到這個被指定參數值的首部字段對應的響應報文後,就不能使用緩存。換言之,無參數值的首部字段可使用緩存。只能在響應指令中指定該參數。
(2)控制可執行緩存的對象的指令
Cache-Control:no-store
請求(和對應的響應)或響應中包含機密信息,所以該指令規定緩存不能在本地存儲請求或響應的任一部分。
(3)指定緩存期限和認證的指令
Cache-Control:s-maxage=604800(單位:秒)
s-maxage指令的功能和max-age指令相同,不一樣點在於s-maxage指令只適用於供多位用戶使用的公共緩存服務器,即對於向同一用戶重複返回響應的服務器來講,這個指令沒有任何做用。
Cache-Control:max-age=604800(單位:秒)
當客戶端發送的請求包含max-age指令時,若是判斷緩存資源的緩存時間數值比指定時間的數值更小,那麼客戶端就接收緩存的資源。當max-age值爲0,那麼緩存服務器一般須要將請求轉發給源服務器。
當客戶端發送的請求包含max-age指令時,緩存服務器將不對資源的有效性再作確認,而max-age數值表明資源保存爲緩存的最長時間。
Cache-Control:min-fresh=60(單位:秒)
min-fresh指令要求緩存服務器返回至少還未過指定時間的緩存資源。這裏即表示爲60秒後資源沒法做爲響應返回了。
Cache-Control:max-stale=3600(單位:秒)
使用max-stale可指示緩存資源,即便過時頁照樣接收。若是指令未指定參數值,那不管通過多久,客戶端都會接收響應;若是指定了具體數值,那麼即便過時,只要仍處於max-stale指定時間內,仍舊會被客戶端接收。
Cache-Control:only-if-cached
使用該指令表示客戶端僅在緩存服務器本地緩存目標資源的狀況下才會要求其返回。換言之,該指令要求緩存服務器不從新加載響應,也不會再次確認資源有效性。若發生請求緩存服務器的本地緩存無響應,則會返回狀態碼504 Gateway Timeout。
Cache-Control:must-revalidate
使用must-revalidate指令,代理會向源服務器再次驗證即將返回的響應緩存目前是否仍然有效。若代理沒法連通源服務器再次獲取有效資源的話,緩存必須給客戶端一條504狀態碼。
使用must-revalidate指令會忽略請求的max-stale指令。即便在首部使用了max-stale,也不會再有效果。
Cache-Control:proxy-revalidate
proxy-revalidate指令要求全部的緩存服務器在接收到客戶端帶有該指令的請求返回響應以前,必須再次驗證緩存的有效性。
Cache-Control:no-transform
使用no-transform指令規定不管是在請求仍是響應中,緩存都不能改變實體主體的媒體類型。這樣能夠防止緩存或代理壓縮圖片等相似操做。
(4)Cache-Control擴展
Cache-Control:private,community=「UCI」
經過cache-extension標記(token),能夠擴展Cache-Control首部字段內的指令。
2,Connection字段
Connection首部字段具有兩個做用,一是控制再也不轉發給代理的首部字段,二是管理持久鏈接。
控制再也不轉發給代理的首部字段
Connection:再也不轉發的首部字段名
在客戶端發送請求和服務器返回響應內,使用Connection首部字段,可控制再也不轉發給代理的首部字段(即Hop-by-hop首部)。
管理持久鏈接
Connection:Close
HTTP/1.1版本的默認鏈接都有持久鏈接。爲此客戶端會在持久鏈接上連續發送請求。當服務器端想明確斷開鏈接時,則指定Connection首部字段的值爲Close。
HTTP/1.1以前的HTTP版本的默認鏈接都是非持久鏈接。爲此,若是想在舊版本的HTTP協議上維持持續鏈接,則須要指定Connection首部字段爲Keep-Alive。
Connection:Keep-Alive
3,Date字段
首部Date字段表示建立HTTP報文的日期和時間。
4,Pragma字段
Pragma字段是HTTP/1.1以前版本的遺留字段,僅做爲HTTP/1.0的向後兼容而定義。該首部字段屬於通用首部字段,但只用在客戶端發送的請求中。客戶端會要求全部的中間服務器不返回緩存的資源。
以HTTP/1.1爲標準,全部中間服務器可直接採用Cache-Control:no-cache指定緩存的處理方式。可是要總體掌握所有中間服務器使用的HTTP協議版本不太顯示,所以在請求報文中會同時採用兩個首部字段。具體以下:
Cache-Control:no-cache
Prama:no-cache
5,Trailer字段
首部字段Trailer會事先說明在報文主體後記錄了哪些首部字段。該首部字段應用在HTTP/1.1版本分塊傳輸編碼時。
6,Transfer-Encoding字段
該字段規定了傳輸報文主體時採用的編碼方式。
7,Upgrade字段
該字段用於檢測HTTP協議以及其餘協議是否可以使用更高的版本進行通訊,其參數值能夠用來指定一個徹底不一樣的通訊協議。
首部字段Upgrade指定爲TLS/1.0,要注意此處兩個首部字段的對應關係,如圖可知,此時Connection設置爲Upgrade。Upgrade首部字段產生做用的Upgrade對象僅限於客戶端和鄰接服務器之間。所以,實用首部字段Upgrade時,要將Connection設置爲Upgrade。
8,Via字段
使用首部字段Via是爲了追蹤客戶端和服務器之間的請求和響應報文的傳輸路徑。報文通過代理或網關時,會在首部字段Via中附加該服務器的信息,而後再進行轉發。首部字段Via不只用於追蹤報文的轉發,還可避免請求迴環的發生,因此必須在通過代理時附加該首部字段內容。
如圖中Via字段數據,其中1.0爲接收請求的服務器上應用的HTTP協議版本。Via首部是爲了追蹤傳輸路徑,因此常常會和TRACE方法一塊兒使用。
9,Warning字段
HTTP/1.1的Warning首部是從HTTP/1.0的響應首部Retry-After演變過來的。該首部一般會告知用戶一些與緩存相關的問題的警告。HTTP/1.1中定義了七種警告,且警告碼具有擴展性。