(chap6 Http首部) 通用首部字段 Cache-Control
1. 操作緩存的工作機制。
指令的參數是可選的,多個指令之間通過“,”分隔。首部字段Cache-Control的指令可用于請求及響應時。
eg. Cache-Control: private,max-age=0,no-cache1.1緩存請求指令:
no-cache 強制想源服務器再次驗證
no-store 不緩存請求或響應的任何內容
max-age 響應的最大Age
max-stale 接受已過期的響應
min-flesh 期望在指定時間內的響應仍有效
no-transform 代理不可更改媒體類型
only-if-cached 從緩存獲取資源
cache-extension 新指令標記
1.2. 緩存響應指令:
public 可向任意方提供相應的緩存
private 僅向特定用戶返回響應
no-cache 緩存前必須先確認其有效性
no-store 不緩存請求或響應的任何內容
no-transform 代理不可更改媒體類型
must-revalidate 可緩存但必須再向源服務器進行確認
proxy-revalidate 要求中間緩存服務器對緩存的響應有效性再進行確認
max-age 響應的最大Age
s-maxage 公共緩存服務器響應的最大Age值
cache-extension 新指令標記
2 指令詳解
3.1.表示能否緩存的指令:
-
public
其他用戶也可利用緩存。 -
private
當指定private指令后,響應只以特定的用戶作為對象,這與public指令的行為相反。
緩存服務器會對該特定用戶提供資源緩存的服務,對于其他用戶發送過來的請求,代理服務器則不會返回緩存。 -
no-cache
使用no-cache指令的目的是為了防止從緩存中返回過期的資源。
。客戶端發送的請求中如果包含no-cache指令,則表示客戶端將不會接收緩存過的響應。于是,“中間”的緩存服務器必須把客戶端請求轉發給源服務器。
。如果服務器返回的響應中包含no-cache指令,那么緩存服務器不能對資源進行緩存。源服務器以后也將不再對緩存服務器請求中提出的資源有效性進行確認,且禁止其對響應資源進行緩存操作。 -
Cache-Control: no-cache=Location
由服務器返回的響應中,若報文首部字段Cache-Control中對no-cache字段名具體指定參數值,那么客戶端在接收到這個被指定參數值的首部字段對應的響應報文后,就不能使用緩存。換言之,無參數值的首部字段可以使用緩存。只能在響應指令中指定該參數。
3.2 控制可執行緩存的對象的指令
- no-store 不緩存請求或響應的任何內容
該指令規定緩存不能在本地存儲請求或響應的任一部分。
3.3 指定緩存期限和認證的指令:
- s-maxage
用于供多位用戶使用的公共緩存服務器
s-maxage指令的功能和 max-age指令的相同,它們的不同點是s-maxage指令只適用于供多位用戶使用的公共緩存服務器°。也就是說,對于向同一用戶重復返回響應的服務器來說,這個指令沒有任何作用。
另外,當使用s-maxage指令后,則直接忽略對Expires首部字段及max-age指令的處理。
- max-age
當客戶端發送的請求中包含max-age指令時,如果判定緩存資源的緩存時間數值比指定時間的數值更小,那么客戶端就接收緩存的資源。另外,當指定max-age值為0,那么緩存服務器通常需要將請求轉發給源服務器。
當服務器返回的響應中包含max-age指令時,緩存服務器將不對資源的有效性再作確認,而max-age數值代表資源保存為緩存的最長時間。
應用HTTP/1.1版本的緩存服務器遇到同時存在 Expires首部字段的情況時,會優先處理max-age指令,而忽略掉Expires首部字段。而HTTP/1.0版本的緩存服務器的情況卻相反,max-age指令會被忽略掉。
- min-fresh(要求緩存服務器返回至少還未過指定時間的緩存資源)
格式:Cache-Control: min-fresh=60(單位:秒)
指令要求緩存服務器返回至少還未過指定時間的緩存資源。比如,當指定min-fresh為 60秒后,過了60秒的資源都無法作為響應返回了。
- max-stale(緩存即使過期也照常接收)
格式:Cache-Control:max-stale=3600(單位:秒)
使用max-stale可指示緩存資源,即使過期也照常接收。
如果指令未指定參數值,那么無論經過多久,客戶端都會接收響應;如果指令中指定了具體數值,那么即使過期,只要仍處于max-stale指定的時間內,仍舊會被客戶端接收。
- only-if-cached(僅在緩存服務器本地緩存目標資源的情況下才會要求其返回)
- Cache-Control: only-if-cached
使用only-if-cached指令表示客戶端僅在緩存服務器本地緩存目標資源的情況下才會要求其返回。換言之,該指令要求緩存服務器不重新加載響應,也不會再次確認資源有效性。若發生請求緩存服務器的本地緩存無響應,則返回狀態碼504 Gateway Timeout。
- proxy-revalidate(必須再次驗證緩存的有效性)
- proxy-revalidate指令要求所有的緩存服務器在接收到客戶端帶有該指令的請求返回響應之前,必須再次驗證緩存的有效性。
- must-revalidate(代理會向源服務器再次獲取有效資源的話,緩存必須給客戶端一條504狀態碼)
使用must-revalidate指令,代理會向源服務器再次驗證即將返回的響應緩存目前是否仍然有效。
若代理無法連通源服務器再次獲取有效資源的話,緩存必須給客戶端一條504 ( Gateway Timeout)狀態碼。
另外,使用must-revalidate指令會忽略請求的max-stale指令(即使已經在首部使用了max-stale,也不會再有效果)。
- no-transform(緩存不能改變實體主體的媒體類型)
使用no-transform指令規定無論是在請求還是響應中,緩存都不能改變實體主體的媒體類型。這樣做可防止緩存或代理壓縮圖片等類似操作。
- cache-Control擴展cache-extension token
通過cache-extension標記( token ),可以擴展Cache-Control首部字段內的指令。
如上例,Cache-Control首部字段本身沒有community這個指令。借助extension tokens實現了該指令的添加。如果緩存服務器不能理解community這個新指令,就會直接忽略。因此,extension tokens僅對能理解它的緩存服務器來說是有意義的。
總結
以上是生活随笔為你收集整理的(chap6 Http首部) 通用首部字段 Cache-Control的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (chap6 Http首部) 首部
- 下一篇: (chap6 Http首部) 通用