通用首部字段的意思,就是:請求和響應報文雙方都會使用的首部
1、Cache-Control
通過指定它的指令,能操作緩存的工作機制
指令參數是可選的,多個指令通過“,”分隔
Cache-Control: private, max-age=0, no-cache
Cache-Control指令一覽:
1.1 緩存請求指令
指令 |
參數 |
說明 |
no-cache |
無 |
強制向源服務器再次驗證 |
no-store |
無 |
不緩存請求或相應的任何內容 |
max-age[秒] |
必須 |
相應的最大Age值 |
max-stale(=[秒]) |
可省略 |
接收已過期的響應 |
min-fresh=[秒] |
必須 |
期望在指定時間內的響應仍有效 |
no-transform |
無 |
代理不可更改媒體類型 |
only-if-cached |
無 |
從緩存獲取資源 |
cache-extension |
|
新標記指令(token{-}) |
1.2 緩存響應指令
指令 |
參數 |
說明 |
public |
無 |
可向任意方提供響應的緩存 |
private |
可省略 |
僅向特定用戶返回響應 |
no-cache |
可省略 |
緩存前必須先確認其有效性 |
no-store |
無 |
不緩存請求或響應的任何內容 |
no-transform |
無 |
代理不可更改媒體類型 |
must-revalidate |
無 |
可緩存但必須再向源服務器進行確認 |
proxy-revalidate |
無 |
要求中間緩存服務器對換緩存的響應有效性再次確認 |
max-age=[秒] |
必需 |
響應的最大Age值 |
s-maxage=[秒] |
必需 |
公共緩存服務器響應的最大Age值 |
cache-extension |
|
新指令標記(token{-}) |
1.3 public
共享、公開的緩存狀態,與private相反
Cache-Control: public
1.4 private
指定緩存對象,需要驗證
Cache-Control: private
1.5 no-cache
防止從緩存中返回過去的資源,請求中如包含該命令,表示客戶端不會接收緩存過的響應,必須向源放武器轉發請求
如果響應中包含該命令,那么緩存服務器不能對其資源進行緩存,且源服務器也將不在對緩存服務器請求中提出的資源有效性進行確認,且禁止其對相應資源進行緩存操作
Cache-Control: no-cache=Location
由服務器返回的響應報文首部字段中,若Cache-Control中對no-cache字段名具體制定參數值,那么客戶端在收到這個被指定參數值的首部字段對應的報文后,就不能緩存
換言之,無參數值的首部字段可以使用緩存,只能在響應中制定該參數
1.6 no-store
請求中包含機密信息,緩存不能在本地存儲請求或響應的任一部分k
Cache-Control: no-store
1.7 s-maxage
一般指代理服務器
與max-age指令相同,不同點在於s-maxage只適用於供多位用戶使用的公共緩存服務器
當使用該指令時,直接忽略對Expires首部字段及max-age指令的處理
Cache-Control: s-maxage=604800(單位:秒)
1.8 max-age
緩存資源緩存時間數值低於指定數值,就接受緩存的資源,如max-age為0,則需要請求源服務器
http1.1中,如遇到存在Expires首部字段的情況,會忽略Expires字段,優先處理max-age指令
Cache-Control: max-age=604800(單位:秒)
1.9 min-fresh
要求緩存服務器返回未過指定時間的資源
Cache-Control: min-fresh=60(單位:秒)
1.10 max-stale
規定緩存的有效期,如指令中沒有參數,則無論多久,客戶端都可以接受響應,如指定了參數,即使過了有效期,只要在指令的范圍內,客戶端都可以接受響應
Cache-Control: max-stale
1.11 only-if-cached
表示客戶端只在緩存服務器有對應資源的情況下才接受響應,若無,則返回504
Cache-Control: only-if-cached
1.12 must-revalidate
代理向客戶端返回響應前再次向源服務器確認資源的有效性,若無,則返回504,且該指令會忽略請求中的max-stale指令
Cache-Control: must-revalidate
1.13 proxy-revalidate
要求所有的緩存服務器在向客戶端返回響應之前再次向源服務器確認資源的有效性
Cache-Control: proxy-revalidate
1.14 no-transform
要求無論請求還是響應,都不能改變實體主體的媒體類型,防止緩存或者代理壓縮圖片等操作
Cache-Control: no-transform
2、Connection
該首部字段具備下面2個作用
1)控制不再轉發給代理的首部字段
Connection:不再轉發的字段名(即刪除后再轉發)
2)管理持久連接
http1.1默認都是持久連接,客戶端會在持久連接上持續發送請求,當服務器明確表示需要斷開連接時,則指明首部字段值為close
Connection: close
http1.1之前的版本默認都是非持久連接,需要在舊版本上保持持久連接,需要加入Keep-Alive指令
Connection-Keep-Alive
3、Date
表明創建http報文的日期和時間
目前http1.1版本使用如下格式的時間:
Date: Sun, 31 Jul 2016 01:28:48 GMT
4、Pragma
是http1.1之前的版本歷史遺留字段,僅作為與http1.0的向后兼容而定義,規范定義的形式唯一,如下所示
Pragma: no-cache
只用於客戶端發送的請求中,客戶端要求所有的中間服務器不返回緩存的內容
5、Trailer
事先說明在報文主體后記錄了哪些首部字段,可應用於http1.1版本分塊傳輸編碼時
6、Transfer-Encoding
規定報文主體的編碼方式
http1.1的傳輸編碼方式僅對分塊傳輸編碼有效
Transfer-Encoding: chunked
7、Upgrade
檢測http協議及其他協議是否可使用更高的版本進行通信,其參數值可用來指定一個完全不同的通信協議
客戶端請求:
GMT /index.htm HTTP/1.1
Upgrade: TLS/1.0
Connection: Upgrade
服務器響應:
HTTP/1.1 101 Switching Protocols
Upgrade: TLS/1.0, HTTP/1.1
Connection: Upgrade
上面的例子中,首部字段Upgrade指定的值為TLS/1.0,這里的兩個首部字段的對應關系,Connection的值被指定為Upgrade。
Upgrade對象僅限於客戶端和鄰近服務器之間,因此,使用首部字段Upgrade時,還需要額外指定Connection Upgrade
對於附有首部字段Upgrade的請求,服務器可以用101Switch Protocols狀態碼作為響應返回
8、Via
使用首部字段Via是為了追蹤客戶端與服務器間的請求和響應報文的傳輸路徑
Via不僅用於追蹤報文的轉發,還可避免請求回環的發生,因此,必須在經過代理時附加該首部字段內容
9、Warning
告知用戶與一些與緩存相關的問題的警告
Warning的首部格式如下,日期部分可省略
Warning:[警告碼] [警告的主機:端口號] "[警告內容]" ([日期時間])
http1.1中定義了7中警告,警告碼對應的警告內容僅供參考
另外,警告碼具備擴展性,今后有可能追加新的警告