![](/img/trans.png)
[英]“no-cache” vs “max-age=0, must-revalidate, proxy-revalidate”
[英]Simultaneous use of “Expires: 0”, “no-cache”, “no-store”, “max-age=0, must-revalidate” - what for?
最近,我發現我們的網絡應用發送了以下標頭:
Expires: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
這是我的閱讀方式:
Expires: 0
“嘿,瀏覽器,您剛剛獲得的資源已經過期”
Cache-Control: [..] max-age=0 [..]
“實際上沒關系我剛才所說的,請執行以下操作:”
no-cache
“請緩存此資源。但是它已經過時,因此請在使用前重新驗證它”
no-store
“也請不要緩存任何內容”
max-age=0, must-revalidate
“還請緩存此資源。但是,如果您想在0秒后使用它,請重新驗證它。”
對此有2種解釋:
他們到底想避免什么?
獎勵問題1:我的理解是否正確,即Expires: 0
相當於( no-cache
警告,但no-cache
警告)而不是no-store
嗎? 即,它允許緩存,但是緩存立即變得陳舊-它不會阻止緩存?
獎勵問題2:我不應該添加proxy-revalidate
嗎?
緩存是HTTP協議的可選功能,它是在RFC 7234中定義的。 Cache-Control
標頭用於為請求/響應鏈中的緩存指定指令。
根據Mozilla的MDN Web文檔 ,您可以使用以下Cache-Control
指令關閉HTTP / 1.1中的緩存:
Cache-Control: no-cache, no-store, must-revalidate
使用上面的Cache-Control
指令時,將max-age
指令設置為0
無關緊要(但不會造成傷害)。
如果收件人不支持Cache-Control
可能還需要添加一個設為0
的Expires
標頭。 從RFC 7234 :
如果響應中包含帶有
max-age
指令的Cache-Control
字段,則接收者必須忽略Expires
字段。 同樣,如果響應中包含s-maxage
指令,則共享緩存接收者務必忽略Expires
字段。 在這兩種情況下,Expires
的值僅適用於尚未實現Cache-Control
字段的收件人。
proxy-revalidate
指令的工作方式與must-revalidate
相同,但僅適用於共享緩存(例如代理)。 也就是說,緩存必須在使用之前驗證過時資源的狀態,並且不應使用過期的資源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.