摘要:告知瀏覽器我希望內容來自緩存我并不關心被緩存響應是否是新鮮的??蛻舳苏埱篁炞C緩存的有效性。
因為最近面試經常會被問到304緩存的問題,因此在網上搜集了各種資料,小記一下
緩存有瀏覽器緩存,代理服務器緩存,服務端緩存等,這里著重記一下瀏覽器緩存
瀏覽器第一次像服務器發起請求時,如果有緩存,瀏覽器在返回信息里面會帶上相應的緩存策略,下面介紹一下有哪些常用的緩存策略。
Expires 過期時間,這是HTTP1.0就有的??蛻舳嗽谑状握埱蠓掌髻Y源的時候服務器設置一個資源的過期時間,這個時間是絕對的,如果設置的緩存策略是這個,那么瀏覽器再次請求的時候會跟所請求資源的過期時間比對一下,如果在過期時間之內,那么從本地讀取,否則會看看是否設置了其他緩存策略,按照其他策略來,沒有的話就向服務器發起請求了。我們可以看出,這個是否發起請求跟客戶端本地時間有很大關系,如果時間設置的不對,那么緩存策略就有可能失效。
Cache-control 這一項的可選值有 max-age/no-cache/no-store/public/private/must-revalidate/s-maxage
這里面最常用到的有max-age/no-cache/no-store, max-age
max-age 會設置一個相對的過期秒數,即從首次請求算起,在這一段時間內都不會過期。
no-cache 響應是可以被緩存的,只不過再跟服務器進行新鮮度匹配之前都不會提供給客戶端使用。所以應該叫do-not-serve-from-cache-without-revalidation更好一點。
no-store 絕對禁止緩存,客戶端緩存不能復制響應,之后的每次請求都從服務器獲取資源。
must-revalidate 在跟服務器進行新鮮度驗證之前,緩存不可以把緩存的響應給瀏覽器。如果原始服務器不可用,會返回504 Gateway Timeout的錯誤。
only-if-cached 告知瀏覽器,我希望內容來自緩存,我并不關心被緩存響應,是否是新鮮的。
Last-modified
在瀏覽器第一次請求某一個資源時,服務器端的返回狀態會是200,內容是你請求的資源,同時有一個Last-Modified的屬性標記此文件在服務期端最后被修改的時間。
客戶端請求驗證緩存的有效性。
If-modified-since
客戶端再次請求某個資源時請求頭會帶上這個屬性。驗證在上次修改的時間之后是否有再次修改。
If-none-match
客戶端再次請求某個資源時請求頭會帶上這個屬性。屬性值是第一次請求該資源時返回的etag值
驗證在上次修改之后是否有新的版本。
緩存命中速度
緩存命中 > 緩存再驗證成功 > 緩存未命中 = 緩存再驗證失??;
緩存命中優先級
Cache-Control http1.1 > Expires > Pragma http1.0來決定是否 (200 from cache)
根據Last-Modified http1.0 和 ETag http1.1 來驗證是否返回 (304 Not Modified) 兩者都有,就必須同時驗證,并且兩者都滿足才會返回304;
盜圖一張,整個的瀏覽器請求的時候緩存驗證過程如下圖
首先看有沒有緩存,沒有的話直接請求服務器,這時候沒出意外的話,正常地返回應該是200
有緩存然后看是否過期,沒過期的話就用緩存的資源了這時候不會發器請求
如果過期了再向服務器發起請求看資源是否有修改,如果沒修改則返回304,如果修改了則返回200連同最新的資源一起返回,更新瀏覽器緩存副本。
參考文章
https://segmentfault.com/a/11...
https://segmentfault.com/a/11...
https://segmentfault.com/a/11...
https://my.oschina.net/leejun...
http://blog.csdn.net/pojianbi...
https://segmentfault.com/a/11...
https://segmentfault.com/a/11...
https://segmentfault.com/a/11...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/61861.html
摘要:最近在全力整理高性能的文檔,并重新學習一遍,放在這里方便大家查看并找到自己需要的知識點。 最近在全力整理《高性能JavaScript》的文檔,并重新學習一遍,放在這里方便大家查看并找到自己需要的知識點。 前端開發文檔 高性能JavaScript 第1章:加載和執行 腳本位置 阻止腳本 無阻塞的腳本 延遲的腳本 動態腳本元素 XMLHTTPRequest腳本注入 推薦的無阻塞模式...
摘要:為了優化性能,使用緩存是一種比較常見的手段。由于篇幅原因,本篇重點講述緩存。緩存未命中達緩存的請求沒有副本可用,而被轉發給原始服務器,與緩存命中相反。協商緩存協商緩存是在用戶強緩存失敗的情況下,向服務器端進行再驗證。 為了優化性能,使用緩存是一種比較常見的手段。那么如何實現緩存以及如何避免緩存呢,都是要探討的話題??梢詮娜齻€部分:http 緩存、cookie、localStorage&...
摘要:導言本文將列舉站點常用緩存技術的基本概念與特點,為想要了解緩存技術的讀者們提供提綱式的技術介紹。這些指令指定用于阻止緩存對請求或響應造成不利干擾的行為。參考連接網站緩存技術總結高性能網站的關鍵緩存靜態資源緩存 導言:本文將列舉web站點常用緩存技術的基本概念與特點,為想要了解web緩存技術的讀者們提供提綱式的技術介紹。 在互聯網迅速發展的今天,一個互聯網站點的請求量是十分驚人的,動輒上...
摘要:原文鏈接瀏覽器緩存瀏覽器緩存強緩存協商緩存強緩存釋義客戶端第一次問服務器要某個資源時,服務器丟還給客戶端所請求的這個資源同時,告訴客戶端將這個資源保存在本地,并且在未來的某個時點之前如果還需要這個資源,直接從本地獲取就行了,不用向服務器請求 原文鏈接:瀏覽器緩存 瀏覽器緩存 強緩存 & 協商緩存 強緩存 釋義: 客戶端第一次問服務器要某個資源時,服務器丟還給客戶端所請求的這個資源...
閱讀 2584·2023-04-25 20:50
閱讀 3929·2023-04-25 18:45
閱讀 2213·2021-11-17 17:00
閱讀 3323·2021-10-08 10:05
閱讀 3073·2019-08-30 15:55
閱讀 3487·2019-08-30 15:44
閱讀 2355·2019-08-29 13:51
閱讀 1111·2019-08-29 12:47