摘要:緩存機制緩存機制主要由以下三部分組成緩存存儲策略這個策略的作用只有一個,用于決定響應內容是否可緩存到客戶端。如果判斷標識無效,則返回,用新數據替換客戶端緩存。表示文件在本地應該緩存,且有效時長是秒從發出請求算起。
HTTP緩存機制
HTTP緩存機制主要由以下三部分組成
緩存存儲策略這個策略的作用只有一個,用于決定 Http 響應內容是否可緩存到客戶端。主要通過Cache-Control來控制。
Cache-Control
max-age
public
private
no-cache
no-store
除了no-store其他都會被緩存到客戶端。
緩存過期策略這個策略的作用也只有一個,那就是決定客戶端是否可直接從本地緩存數據中加載數據并展示(否則就發請求到服務端獲取)
數據緩存到了本地后還需要經過判斷才能使用,那么瀏覽器通過什么條件來判斷呢? 答案是:Expires,Expires 指名了緩存數據有效的絕對時間,告訴客戶端到了這個時間點(比照客戶端時間點)后本地緩存就作廢了,在這個時間點內客戶端可以認為緩存數據有效,可直接從緩存中加載展示。
緩存對比策略將緩存在客戶端的數據標識發往服務端,服務端通過標識來判斷客戶端 緩存數據是否仍有效,進而決定是否要重發數據。
客戶端檢測到數據過期或瀏覽器刷新后,往往會重新發起一個 http 請求到服務器,服務器此時并不急于返回數據,而是看請求頭有沒有帶標識( If-Modified-Since、If-None-Match)過來,如果判斷標識仍然有效,則返回304告訴客戶端取本地緩存數據來用即可(這里要注意的是你必須要在首次響應時輸出相應的頭信息(Last-Modified、ETags)到客戶端)。如果判斷標識無效,則返回200,用新數據替換客戶端緩存。
ETags, If-None-MatchEtag是指根據實體內容生成一段hash字符串,標識資源的狀態,由服務端產生。瀏覽器會將這串字符串傳回服務器,驗證資源是否已經修改
Last-Modified, If-Modified-Since這兩個是HTTP1.0中用來驗證資源是否過期的請求/響應頭,這兩個頭部都是日期,驗證過程與Etag類似。
總結Http 緩存機制實際上是 Http 緩存策略三個要素(緯度)相互作用的集合,所以在分析和設置 Http 報文緩存頭時,只要能從中精準的分解出緩存三要素,我們就能非常準確的預判到緩存設置最終能達到的效果。
實踐在html文件頭部加上如下標簽,能使該文件每次去服務端做對比,若不同則返回新文件,若相同則取客戶端緩存。
或是在項目中添加NoCacheFilter.java文件,響應頭添加相關屬性
HttpServletResponse resp = (HttpServletResponse) response; resp.setHeader("Cache-Control", "no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0"); resp.setHeader("Pragma", "no-cache");字段 HTTP1.0 緩存字段詳解
Pragma。 設置頁面是否緩存,為Pragma則緩存,no-cache則不緩存。
Expires。有了Pragma來禁用緩存,自然也需要有個東西來啟用緩存和定義緩存時間。如果Pragma頭部和Expires頭部同時存在,則起作用的會是Pragma。,響應報文中Expires所定義的緩存時間是相對服務器上的時間而言的,其定義的是資源“失效時刻”,如果客戶端上的時間跟服務器上的時間不一致(特別是用戶修改了自己電腦的系統時間),那緩存時間可能就沒啥意義了。
HTTP1.1 緩存字段詳解Cache-Control: 定義緩存過期時間。若報文中同時出現了 Expires 和 Cache-Control,則以 Cache-Control 為準。
(1)max-age=600。 表示文件在本地應該緩存,且有效時長是600秒(從發出請求算起)。在接下來600秒內,如果有請求這個資源,瀏覽器不會發出 HTTP 請求,而是直接使用本地緩存的文件。
(2)no-cache。實際上她是會被緩存的,只不過每次在向客戶端(瀏覽器)提供響應數據時,==緩存都要向服務器評估緩存響應的有效性==
(3)no-store
響應不被緩存的意思。
Last-Modified / If-Modified-Since
(1)Last-Modified: 標示這個響應資源的最后修改時間。web服務器在響應請求時,告訴瀏覽器資源的最后修改時間。
(2)If-Modified-Since:
當資源過期時(使用Cache-Control標識的max-age),發現資源具有Last-Modified聲明,則再次向web服務器請求時帶上頭 If-Modified-Since,表示請求時間。若服務端請求資源的最后修改時間較新,則響應資源內容(HTTP 200);若最后修改時間較舊,則響應HTTP 304,告知瀏覽器繼續使用所保存的cache。
Etag/If-None-Match: Etag/If-None-Match也要配合Cache-Control使用。
(1)Etag: web服務器響應請求時,告訴瀏覽器當前資源在服務器的唯一標識(生成規則由服務器覺得)
(2)If-None-Match: 當資源過期時(使用Cache-Control標識的max-age),發現資源具有Etage聲明,則再次向web服務器請求時帶上頭If-None-Match (Etag的值)。服務器與被請求資源的相應校驗串進行比對,決定返回200或304。
既生Last-Modified何生Etag?
HTTP1.1中Etag的出現主要是為了解決幾個Last-Modified比較難解決的問題:
(1) Last-Modified標注的最后修改只能精確到秒級,如果某些文件在1秒鐘以內,被修改多次的話,它將不能準確標注文件的修改時間。
(2) 如果某些文件會被定期生成,當有時內容并沒有任何變化,但Last-Modified卻改變了,導致文件沒法使用緩存。
(3) 有可能存在服務器沒有準確獲取文件修改時間,或者與代理服務器時間不一致等情形。
Last-Modified與ETag是可以一起使用的,服務器會優先驗證ETag,一致的情況下,才會繼續比對Last-Modified,最后才決定是否返回304。
小結(1)瀏覽器第一次請求
(2) 瀏覽器第二次請求
緩存的作用減少網絡帶寬消耗。
無論對于網站運營者或者用戶,帶寬都代表著金錢,過多的帶寬消耗,只會便宜了網絡運營商。當Web緩存副本被使用時,只會產生極小的網絡流量,可以有效的降低運營成本。
降低服務器壓力
給網絡資源設定有效期之后,用戶可以重復使用本地的緩存,減少對源服務器的請求,間接降低服務器的壓力。同時,搜索引擎的爬蟲機器人也能根據過期機制降低爬取的頻率,也能有- 效降低服務器的壓力。
減少網絡延遲,提升頁面渲染速度
帶寬對于個人網站運營者來說是十分重要,緩存的使用能夠明顯加快頁面打開速度,達到更好的體驗。
參考鏈接https://juejin.im/entry/59c8d...
https://segmentfault.com/a/11...
https://mp.weixin.qq.com/s/qO...
https://segmentfault.com/a/11...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/61917.html
摘要:緩存緩存,也叫網關緩存反向代理緩存。瀏覽器先向網關發起請求,網關服務器后面對應著一臺或多臺負載均衡源服務器,會根據它們的負載請求,動態將請求轉發到合適的源服務器上。雖然這種架構負載均衡源服務器之間的緩存沒法共享,但卻擁有更好的處擴展性。 一、前言? 工作上遇到一個這樣的需求,一個H5頁面在APP端,如果勾選已讀狀態,則下次打開該鏈接,會跳過此頁面。用到了HTML5 的本地存儲 API ...
摘要:對于瀏覽器緩存,相信很多開發者對它真的是又愛又恨。那么瀏覽器緩存究竟是個什么樣的神奇玩意呢什么是瀏覽器緩存簡單來說,瀏覽器緩存就是把一個已經請求過的資源如頁面,圖片,,數據等拷貝一份副本儲存在瀏覽器中。 對于瀏覽器緩存,相信很多開發者對它真的是又愛又恨。一方面極大地提升了用戶體驗,而另一方面有時會因為讀取了緩存而展示了錯誤的東西,而在開發過程中千方百計地想把緩存禁掉。那么瀏覽器緩存究竟...
摘要:對于瀏覽器緩存,相信很多開發者對它真的是又愛又恨。那么瀏覽器緩存究竟是個什么樣的神奇玩意呢什么是瀏覽器緩存簡單來說,瀏覽器緩存就是把一個已經請求過的資源如頁面,圖片,,數據等拷貝一份副本儲存在瀏覽器中。 對于瀏覽器緩存,相信很多開發者對它真的是又愛又恨。一方面極大地提升了用戶體驗,而另一方面有時會因為讀取了緩存而展示了錯誤的東西,而在開發過程中千方百計地想把緩存禁掉。那么瀏覽器緩存究竟...
瀏覽器緩存機制學習總結 最近在做一個考試系統時,由于經常加載試卷或圖片等等靜態資源,抽空學習了一下緩存機制,在此記錄 為什么要使用緩存 1、通過HTTP協議,在客戶端和瀏覽器建立連接時需要消耗時間,而大的響應需要在客戶端和服務器之間進行多次往返通信才能獲得完整的響應,這拖延了瀏覽器可以使用和處理內容的時間。這就增加了訪問服務器的數據和資源的成本,因此利用瀏覽器的緩存機制重用以前獲取的數據就變成了性...
閱讀 1376·2021-11-04 16:11
閱讀 3036·2021-10-12 10:11
閱讀 2969·2021-09-29 09:47
閱讀 1608·2021-09-22 15:40
閱讀 1007·2019-08-29 15:43
閱讀 2798·2019-08-29 13:50
閱讀 1572·2019-08-29 13:28
閱讀 2685·2019-08-29 12:54