2016-05-13 86 views
1

我有一個簡單的問題。我GOOGLE了,但沒有找到答案。瀏覽器是否曾經做過高速緩存響應時沒有返回緩存相關的緩存?

我有一個頁面。我想爲頁面內容禁用緩存。

是的。我可以添加緩存控制指令,如

Cache-Control: no-cache, no-store, must-revalidate, max-age: 0 

但問題是:如果與高速緩存中沒有HTTP標頭中返回,如緩存控制,過期,語用,最後修改,...是否瀏覽器/代理緩存響應在這種情況下?如果是,何時?

謝謝!

+0

這將取決於客戶,所以這不會有明確的答案。 –

+0

這並不完全取決於客戶端,因爲瀏覽器是基於HTTP Spec製作的。 – Loc

+0

規格說明了關於客戶端如何在本地緩存和提供數據的任何內容?我敢打賭它沒有。 –

回答

2

RFC兼容的客戶端可以通過variety of instructions來避免緩存頁面。不過,就瀏覽器的歷史而言,anything goes

如果沒有適合緩存驗證頭,無論是中介機構及其客戶應該考慮的響應可緩存:

緩存必須不存儲任何請求的響應,除非[...]的響應任一:

甲漏洞可以是與被認爲在默認情況下可高速緩存按照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不一定適用於歷史機制。也就是說,歷史機制即使已經過期也可以顯示先前的表示。

總之,中間商有很多自由來緩存沒有明顯緩存控制指令的響應。始終提供請求方法(例如,GETHEAD)和響應代碼(請參見上文)首先可緩存。瀏覽器的緩存應該像任何普通的中介一樣(實際上是這樣),但是在歷史機制的上下文中,可以自由故意忽略所有緩存機制(存在或不存在)並直接從其中加載頁面記憶。

+0

@Loc:我已經更新了我的回答幾個補充。我最初的主張並不完全正確。 – DaSourcerer

+0

謝謝!真棒回答! – Loc