摘要:緩存詳解標簽空格分隔緩存緩存之于性能優化請求更快通過將內容緩存在本地瀏覽器或距離最近的緩存服務器如,在不影響網站交互的前提下可以大大加快網站加載速度。強制緩存不發請求到服務器,協商緩存會發請求到服務器。參考瀏覽器協議緩存機制詳解
Web緩存詳解
標簽(空格分隔): 緩存
緩存之于性能優化請求更快:通過將內容緩存在本地瀏覽器或距離最近的緩存服務器(如CDN),在不影響網站交互的前提下可以大大加快網站加載速度。
降低服務器壓力:在大量用戶并發請求的情況下,服務器的性能受到限制,此時將一些靜態資源放置在網絡的多個節點,可以起到均衡負載的作用,降低服務器的壓力。
緩存方式服務端緩存,例如CDN
客戶端緩存,即瀏覽器緩存,可通過cache,manifest等實現.
瀏覽器緩存分兩類,強制緩存和協商緩存
強制緩存:瀏覽器在加載資源時,根據http header判斷它是否命中強緩存,如果命中,瀏覽器直接從自己的緩存中讀取資源,不會發請求到服務器。比如某個css文件,如果瀏覽器在加載它所在的網頁時,這個css文件的緩存配置命中了強緩存,瀏覽器就直接從緩存中加載這個css,連請求都不會發送到網頁所在服務器.
協商緩存:當強緩存沒有命中的時候,瀏覽器一定會發送一個請求到服務器,通過服務器端依據資源的另外一些http header驗證這個資源是否命中協商緩存,如果協商緩存命中,服務器會將這個請求返回(304),但是不會返回這個資源的數據,而是告訴客戶端可以直接從緩存中加載這個資源,于是瀏覽器就又會從自己的緩存中去加載這個資源;若未命中請求,則將資源返回客戶端,并更新本地緩存數據(200)。
強制緩存不發請求到服務器,協商緩存會發請求到服務器。
強制緩存:Expires、Cache-control
協商緩存:Last-Modified/If-Modified-Since, Etag/If-None-Match
強制緩存控制Expires,HTTP/1.0提出的一個表示資源過期時間的header,它描述的是一個絕對時間,由服務器返回,用GMT格式的字符串表示,如:Expires:Thu, 31 Dec 2016 23:55:55 GMT,Expires是較老的強緩存管理header,由于它是服務器返回的一個絕對時間,這樣存在一個問題,如果客戶端的時間與服務器的時間相差很大(比如時鐘不同步,或者跨時區),那么誤差就很大,所以在HTTP/1.1版開始,使用Cache-Control: max-age=秒替代。
Cache-Control描述的是一個相對時間,在進行緩存命中的時候,利用客戶端時間進行判斷,所以相比較Expires,Cache-Control的緩存管理更有效.
讀取緩存數據條件:上次緩存時間(客戶端的)+max-age < 當前時間(客戶端的).Cache-Control取值的含義:
各個消息中的指令含義如下:
no-cache指示請求或響應消息不能緩存,該選項并不是說可以設置”不緩存“,而是需要和服務器確認。
max-age指示客戶機可以接收生存期不大于指定時間(以秒為單位)的響應。上次緩存時間(客戶端的)+max-age(64200s)<客戶端當前時間
min-fresh指示客戶機可以接收響應時間小于當前時間加上指定時間的響應。
協商緩存控制Last-Modified/If-Modified-Since:
Last-Modified:標示這個響應資源的最后修改時間。web服務器在響應請求時,告訴瀏覽器資源的最后修改時間。If-Modified-Since:當資源過期時(強緩存失效),發現資源具有Last-Modified聲明,則再次向web服務器請求時帶上If-Modified-Since標簽,把上次服務器返回的Last-Modified時間返回到服務器端。web服務器收到請求后根據If-Modified-Since 時間與被請求資源的最后修改時間進行比對。若最后修改時間較新,說明資源又被改動過,則響應整片資源內容(寫在響應消息包體內),HTTP 200;若最后修改時間較舊,說明資源無新修改,則響應HTTP 304 (無需包體,節省瀏覽),告知瀏覽器繼續使用所保存的cache。
注: Last-Modified標注的最后修改只能精確到秒級,如果某些文件在1秒鐘以內,被修改多次的話,它將不能準確標注文件的修改時間(無法及時更新文件)
如果某些文件會被定期生成,當有時內容并沒有任何變化,但Last-Modified卻改變了,導致文件沒法使用緩存,有可能存在服務器沒有準確獲取文件修改時間,或者與代理服務器時間不一致等情形(無法使用緩存)。
Etag/If-None-Match:
Etag:web服務器響應請求時,告訴瀏覽器當前資源在服務器的唯一標識(生成規則由服務器決定)。Apache中,ETag的值,默認是對文件的索引節(INode),大小(Size)和最后修改時間(MTime)進行Hash后得到的。
If-None-Match:當資源過期時(使用Cache-Control標識的max-age),發現資源具有Etage聲明,則再次向web服務器請求時帶上頭If-None-Match (Etag的值)。web服務器收到請求后發現有頭If-None-Match 則與被請求資源的相應校驗串進行比對,決定返回200或304。
注:Etag是服務器自動生成或者由開發者生成的對應資源在服務器端的唯一標識符,能夠更加準確的控制緩存。
上述緩存控制機制優先級:
Expires < Cache:max-age
Last-Modified < ETag
CDN的全稱是Content Delivery Network,即內容分發網絡。通過在網絡各處放置節點服務器所構成的在現有的互聯網基礎之上的一層智能虛擬網絡,CDN系統能夠實時地根據網絡流量和各節點的連接、負載狀況以及到用戶的距離和響應時間等綜合信息將用戶的請求重新導向離用戶最近的服務節點上。其目的是使用戶可就近取得所需內容,解決 Internet網絡擁擠的狀況,提高用戶訪問網站的響應速度。
CDN是一個經策略性部署的整體系統,包括分布式存儲、負載均衡、網絡請求的重定向和內容管理4個要件,而內容管理和全局的網絡流量管理(Traffic Management)是CDN的核心所在。通過用戶就近性和服務器負載的判斷,CDN確保內容以一種極為高效的方式為用戶的請求提供服務。
參考:
瀏覽器 HTTP 協議緩存機制詳解
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85020.html
摘要:緩存詳解標簽空格分隔緩存緩存之于性能優化請求更快通過將內容緩存在本地瀏覽器或距離最近的緩存服務器如,在不影響網站交互的前提下可以大大加快網站加載速度。強制緩存不發請求到服務器,協商緩存會發請求到服務器。參考瀏覽器協議緩存機制詳解 Web緩存詳解 標簽(空格分隔): 緩存 緩存之于性能優化 請求更快:通過將內容緩存在本地瀏覽器或距離最近的緩存服務器(如CDN),在不影響網站交互的前提...
摘要:計算數組的極值微信面試題獲取元素的最終前端掘金一題目用代碼求出頁面上一個元素的最終的,不考慮瀏覽器,不考慮元素情況。 Excuse me?這個前端面試在搞事! - 前端 - 掘金金三銀四搞事季,前端這個近年的熱門領域,搞事氣氛特別強烈,我朋友小偉最近就在瘋狂面試,遇到了許多有趣的面試官,有趣的面試題,我來幫這個搞事 boy 轉述一下。 以下是我一個朋友的故事,真的不是我。 ... ja...
摘要:去美團面試,問到了什么是線程池,如何使用,為什么要用以下做個總結。二線程池線程池的作用線程池作用就是限制系統中執行線程的數量。真正的線程池接口是。創建固定大小的線程池。此線程池支持定時以及周期性執行任務的需求。 去美團面試,問到了什么是線程池,如何使用,為什么要用,以下做個總結。關于線程之前也寫過一篇文章《高級面試題總結—線程池還能這么玩?》 1、什么是線程池:? java.util...
摘要:去美團面試,問到了什么是線程池,如何使用,為什么要用以下做個總結。二線程池線程池的作用線程池作用就是限制系統中執行線程的數量。真正的線程池接口是。創建固定大小的線程池。此線程池支持定時以及周期性執行任務的需求。 去美團面試,問到了什么是線程池,如何使用,為什么要用,以下做個總結。關于線程之前也寫過一篇文章《高級面試題總結—線程池還能這么玩?》 1、什么是線程池:? java.util...
閱讀 3233·2021-10-13 09:40
閱讀 3702·2019-08-30 15:54
閱讀 1314·2019-08-30 13:20
閱讀 2999·2019-08-30 11:26
閱讀 481·2019-08-29 11:33
閱讀 1104·2019-08-26 14:00
閱讀 2363·2019-08-26 13:58
閱讀 3371·2019-08-26 10:39