我有一個簡單的問題。我GOOGLE了,但沒有找到答案。瀏覽器是否曾經做過高速緩存響應時沒有返回緩存相關的緩存?
我有一個頁面。我想爲頁面內容禁用緩存。
是的。我可以添加緩存控制指令,如
Cache-Control: no-cache, no-store, must-revalidate, max-age: 0
但問題是:如果與高速緩存中沒有HTTP標頭中返回,如緩存控制,過期,語用,最後修改,...是否瀏覽器/代理緩存響應在這種情況下?如果是,何時?
謝謝!
我有一個簡單的問題。我GOOGLE了,但沒有找到答案。瀏覽器是否曾經做過高速緩存響應時沒有返回緩存相關的緩存?
我有一個頁面。我想爲頁面內容禁用緩存。
是的。我可以添加緩存控制指令,如
Cache-Control: no-cache, no-store, must-revalidate, max-age: 0
但問題是:如果與高速緩存中沒有HTTP標頭中返回,如緩存控制,過期,語用,最後修改,...是否瀏覽器/代理緩存響應在這種情況下?如果是,何時?
謝謝!
RFC兼容的客戶端可以通過variety of instructions來避免緩存頁面。不過,就瀏覽器的歷史而言,anything goes。
如果沒有適合緩存驗證頭,無論是中介機構及其客戶應該考慮的響應可緩存:
緩存必須不存儲任何請求的響應,除非[...]的響應任一:
- 含有Expires頭域,或
- 包含max-age響應指令,或
- 含有s-maxage響應指令和高速緩存共享,或
- 包含Cache Control Extension,允許它被高速緩存,或
- 具有被定義爲cacheable by default一個狀態碼,或
- 包含public response directive
甲漏洞可以是與被認爲在默認情況下可高速緩存按照RFC 7231, section 6.1狀態代碼那些響應:
默認情況下(例如本說明書中的200,203,204,206,300,301,404,405,410,414和501)被定義爲可緩存的狀態代碼的響應可以被高速緩存與heuristic expiration除非方法定義或顯式高速緩存控件另有說明
RFC 7234的鏈接部分故意含糊不清。我的看法是,緩存將基於他們可以找到的任何其他標題插入合理的到期時間。這很可能允許到期時間基於Set-Cookie
標題的參數。回到第3節,結束語聲明
在正常操作中,某些緩存不會存儲既沒有緩存驗證器也沒有明確的到期時間的響應,因爲這樣的響應是通常不用於存儲。但是,不禁止緩存存儲此類響應。
然而,瀏覽器可以隨意爲他們的頁面提供服務。從第6部分開始:
freshness model不一定適用於歷史機制。也就是說,歷史機制即使已經過期也可以顯示先前的表示。
總之,中間商有很多自由來緩存沒有明顯緩存控制指令的響應。始終提供請求方法(例如,GET
,HEAD
)和響應代碼(請參見上文)首先可緩存。瀏覽器的緩存應該像任何普通的中介一樣(實際上是這樣),但是在歷史機制的上下文中,可以自由故意忽略所有緩存機制(存在或不存在)並直接從其中加載頁面記憶。
@Loc:我已經更新了我的回答幾個補充。我最初的主張並不完全正確。 – DaSourcerer
謝謝!真棒回答! – Loc
這將取決於客戶,所以這不會有明確的答案。 –
這並不完全取決於客戶端,因爲瀏覽器是基於HTTP Spec製作的。 – Loc
規格說明了關於客戶端如何在本地緩存和提供數據的任何內容?我敢打賭它沒有。 –