為什么在開發者工具中勾選 "禁用快取 "會導致Cache-Control: no-cache在請求中被發送?
no-cache意味著與服務器進行檢查,看看快取的副本是否與服務器上的相同,如果是,則使用它,如果不是,則獲得新的版本。
但是,如果快取被禁用,那么無論如何客戶端都必須向服務器請求一個新的版本。
那么它為什么要費力地發送no-cache呢?
另外,如果不同時發送If-None-Match,no-cache不是毫無意義嗎?否則服務器就無法知道你的快取中的檔案是什么版本。
我猜想沒有快取的版本,所以它不能在If-None-Match中發送ETag,這讓我回到了最初的問題:為什么要使用no-cache。
在清除快取,取消 "禁用快取 "復選框,并重繪 頁面之后,你可以看到沒有發送Cache-Control頭:
uj5u.com熱心網友回復:
no-cache意味著與服務器進行檢查,看看快取的副本是否與服務器上的相同,如果是,就使用它,如果不是,就獲取新的版本。
no-cache 意思是:"快取不得使用存盤的回應來滿足未在源服務器上成功驗證的請求。" 它并不要求有條件的請求,一個普通的GET也會滿足該定義。
那么它為什么要費力地發送no-cache呢?
為了防止中間快取回傳一個未經驗證的快取版本。
另外,如果不同時發送
If-None-Match,no-cache不是毫無意義嗎?否則服務器就沒有辦法知道你的快取中的檔案是什么版本。
瀏覽器沒有進行條件性請求(盡管它可以),所以它沒有使用If-None-Match。然而,一個中間快取可能有一個帶有ETag的快取版本,它可以重新驗證該快取。或者不需要。
我認為你所忽略的一點是,這個指令是針對中間快取的,以控制它們的行為。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/311300.html
標籤:


