前端開發的同學大家都知道,專案中的靜態檔案等資訊,都要做快取處理,這裡,我們就來說一下http的快取策略。快取,顧名思義,其實就把是拿到的資源存起來,下次要用的時候就可以直接使用啦。有什麼作用呢?重用已獲取的資源能夠有效的提公升**與應用的效能。
快取其實是乙個很廣義的概念,用到的地方很多,當然作用只有乙個,就是利用空間換取時間,讀取本地的資源當然會比取遠端讀取資源來得快得多。
快取可以在很多地方:
這裡,我們主要講的是瀏覽器快取~
當我們搭建乙個**的時候,其實一些靜態資源的改動並不會很經常,比如:js、css、等,這種資源,其實我們可以快取到使用者的本地,下次訪問這些資源的時候,直接從命中快取即可,即加快使用者訪問速度,又可以減少伺服器的壓力。
http的快取,分為兩種:強快取 & 協商快取
強快取,即使用者請求資源的時候,發現資源為強快取型別,直接獲取快取資料即可。
當使用者第一次請求資源時,http通過響應頭設定快取策略。瀏覽器接受到強快取的資訊之後就會把資源快取到使用者本地。
命中強快取有兩個字段,下圖為掘金某個css的響應頭。
// response 響應頭
// 相對時間
// 絕對時間
expires: sun, 27 jan 2019
12:19:08 gmt
複製**
使用者第二次訪問資源的時候,如果快取不過期,那麼瀏覽器直接拉取快取資料即可。
那麼,當瀏覽器快取過期了怎麼辦?這時協商快取就派上用場了~
當我們訪問資源時,響應頭會攜帶協商快取相關的字段。
// response 響應頭
// 版本號,唯一值
// 最後更新時間
last-modified: fri, 17 nov 2017
07:31:58 gmt
複製**
當強快取過期時,瀏覽器發請求的時候會攜帶協商快取對應的字段在請求頭中,伺服器根據請求頭中的資訊,如果命中快取,則返回304,否則直接請求資料即可。
// requet 請求頭
// 上一次請求的etag
// 上一次請求的last-modified
if-modified-since : fri, 17 nov 2017
07:31:58 gmt
複製**
下圖例子使用的是http 1.1,所以攜帶的是if-none-match
快取固然好用,但是在開發過程中,經常會遇到因為快取而沒有更新的情況。這裡記一下常用的兩個方案:
快取可以有效提公升請求速度,減少伺服器壓力,在專案中可以好好利用~
HTTP 快取策略
瀏覽器一般快取 css js等靜態檔案,因為這些檔案的更新頻率相對來說比較低,合理利用瀏覽器的快取對 的效能提公升有很大幫助。http快取分為兩部分,分別是本地快取和快取協商,當本地快取不生效時會啟用快取協商。http快取主要由http協議的頭 header 資訊來制定。本地快取 本地快取是指瀏覽器...
HTTP快取策略
瀏覽器一般快取 css js等靜態檔案,因為這些檔案的更新頻率相對來說比較低,合理利用瀏覽器的快取對 的效能提公升有很大幫助。http快取分為兩部分,分別是本地快取和快取協商,當本地快取不生效時會啟用快取協商。http快取主要由http協議的頭 header 資訊來制定。本地快取是指當瀏覽器請求資源...
http快取策略
http快取主要由兩種 本地快取和快取協商。優先使用本地快取,本地快取不起作用時使用快取協商。http快取主要是頭部資訊header來決定的。一 什麼是本地快取?本地快取有頭部資訊的cache control和expires來決定。cache control是個相對值常量,它有如下幾個值 no ca...