HTTP 快取策略

2021-07-09 17:54:43 字數 2559 閱讀 5528

瀏覽器一般快取、css、js等靜態檔案,因為這些檔案的更新頻率相對來說比較低,合理利用瀏覽器的快取對**的效能提公升有很大幫助。http快取分為兩部分,分別是本地快取和快取協商,當本地快取不生效時會啟用快取協商。http快取主要由http協議的頭(header)資訊來制定。

本地快取

本地快取是指瀏覽器請求資源時命中了瀏覽器本地的快取資源,瀏覽器並不會傳送真正的請求給伺服器了。它的執行過程是:

1.第一次瀏覽器傳送請求給伺服器時,此時瀏覽器還沒有本地快取副本,伺服器返回資源給瀏覽器,響應碼是200 ok,瀏覽器收到資源後,把資源和對應的響應頭一起快取下來。

2.第二次瀏覽器準備傳送請求給伺服器時候,瀏覽器會先檢查上一次服務端返回的響應頭資訊中的cache-control,它的值是乙個相對值,單位為秒,表示資源在客戶端快取的最大有效期,過期時間為第一次請求的時間減去cache-control的值,過期時間跟當前的請求時間比較,如果本地快取資源沒過期,那麼命中快取,不再請求伺服器。

3.如果沒有命中,瀏覽器就會把請求傳送給伺服器,進入快取協商階段。

cache-control是htpp快取策略中最重要的頭,它是http/1.1中出現的,它由如下幾個值

public:可以被所有的使用者快取,包括終端使用者和cdn等中間**伺服器。

private:只能被終端使用者的瀏覽器快取,不允許cdn等中繼快取伺服器對其快取。

max-age:從當前請求開始,允許獲取的響應被重用的最長時間(秒)。

例如:cache-control:public, max-age=1000

表示資源可以被所有使用者以及**伺服器快取,最長時間為1000秒。

expires

expires是http/1.0出現的頭資訊,同樣是用於決定本地快取策略的頭,它是乙個絕對時間,時間格式是如mon, 10 jun 2015 21:31:12 gmt,只要傳送請求時間是在expires之前,那麼本地快取始終有效,否則就會去伺服器傳送請求獲取新的資源。如果同時出現cache-control:max-age和expires,那麼max-age優先順序更高。他們可以這樣組合使用:

last-modified與if-modified-since

瀏覽器第一次請求資源時,伺服器會把資源的最新修改時間last-modified:thu, 29 dec 2011 18:23:55 gmt放在響應頭中返回給瀏覽器,第二次請求時,瀏覽器就會把上一次伺服器返回的修改時間放在請求頭if-modified-since:thu, 29 dec 2011 18:23:55傳送給伺服器,伺服器就會拿這個時間跟伺服器上的資源的最新修改時間進行對比,如果兩者相等或者大於伺服器上的最新修改時間,那麼表示瀏覽器的快取是有效的,此時快取會命中,伺服器就不再返回內容給瀏覽器了,同時last-modified頭也不會返回,因為資源沒被修改,返回了也沒什麼意義。如果沒命中快取則最新修改的資源連同last-modified頭一起返回。

第一次請求返回的響應頭:

cache-control:max-age=3600

expires:tue, 26 jan 2016 08:28:52 gmt

last-modified:fri, 15 jan 2016 12:06:06 gmt

第二次請求的請求頭資訊:

if-modified-since:fri, 15 jan 2016 12:06:06 gmt

這組頭資訊是基於資源的修改時間來判斷資源有沒有更新,另一種方式就是根據資源的內容來判斷,就是接下來要討論的etag與if-none-match

etag與if-none-match

etag/if-none-match與last-modified/if-modified-since的流程其實是類似的,唯一的區別是它基於資源的內容的摘要資訊(比如md5 hash)來判斷。瀏覽器傳送第二次請求時,會把第一次的響應頭資訊etag的值放在if-none-match的請求頭中傳送到伺服器,與最新的資源的摘要資訊對比,如果相等,取瀏覽器快取,否則內容有更新,最新的資源連同最新的摘要資訊返回。用etag的好處是如果因為某種原因到時資源的修改時間沒改變,那麼用etag就能區分資源是不是有被更新。

第一次請求返回的響應頭:

cache-control:public, max-age=31536000

etag: 「15f0fff99ed5aae4edffdd6496d7131f」

第二次請求的請求頭資訊:

if-none-match: 「15f0fff99ed5aae4edffdd6496d7131f」

HTTP快取策略

瀏覽器一般快取 css js等靜態檔案,因為這些檔案的更新頻率相對來說比較低,合理利用瀏覽器的快取對 的效能提公升有很大幫助。http快取分為兩部分,分別是本地快取和快取協商,當本地快取不生效時會啟用快取協商。http快取主要由http協議的頭 header 資訊來制定。本地快取是指當瀏覽器請求資源...

HTTP 快取策略

前端開發的同學大家都知道,專案中的靜態檔案等資訊,都要做快取處理,這裡,我們就來說一下http的快取策略。快取,顧名思義,其實就把是拿到的資源存起來,下次要用的時候就可以直接使用啦。有什麼作用呢?重用已獲取的資源能夠有效的提公升 與應用的效能。快取其實是乙個很廣義的概念,用到的地方很多,當然作用只有...

http快取策略

http快取主要由兩種 本地快取和快取協商。優先使用本地快取,本地快取不起作用時使用快取協商。http快取主要是頭部資訊header來決定的。一 什麼是本地快取?本地快取有頭部資訊的cache control和expires來決定。cache control是個相對值常量,它有如下幾個值 no ca...