瀏覽器快取機制 http快取頭

2021-08-09 14:46:02 字數 3553 閱讀 8174

重用已獲取的資源能夠有效的提公升**與應用的效能。web 快取能夠減少延遲與網路阻塞,進而減少顯示某個資源所用的時間。借助 http 快取,web 站點變得更具有響應性。

快取作為加快頁面載入速度的方法,可以說是必不可少的乙個方法,如何能更好地運用快取來服務客戶,首先我們就得了解清楚快取;

先上一張從segmentfault搬運來的快取過程圖

從圖中能很清楚的看出來,快取是怎樣的乙個執行流程,接下來我們將一一介紹幾種快取機制;

對於強制快取來說,http頭部中會有兩個欄位來標明失效規則(expires/cache-control)

- expires:

http/1.0的快取機制,expires的值是伺服器返回的過期時間,在過期之前瀏覽器都可以直接在快取裡讀取相應的檔案,但expires存在乙個bug,這個bug就是,expires對比的時間是客戶端的時間,也就是說,我們只要設定自己電腦的時間超過expires的值就會被判定為相應的資源已經過期需要重新請求,所以可能會導致差錯;優點是expires的設定非常的簡潔明瞭就是乙個時間,示例:expires: thu, 01 dec 1994 16:00:00 gmt

- cache-control:

cache-control是http/1.1的產物,在request header與response header中都支援這個屬性,值得注意的是,快取指令是單向的, 這意味著在請求設定的指令,在響應中不一定包含相同的指令。

接下來來看一看cache-control的命令有哪些,作用都是什麼:

- 請求指令與響應指令

cache-control: max-age=

cache-control: max-stale[=]

cache-control: min-fresh=

cache-control: no-cache

cache-control: no-store

cache-control: no-transform

cache-control: only-if-cached

cache

-control: must-revalidate

cache

-control: no-cache

cache

-control: no-store

cache

-control: no-transform

cache

-control: public

cache

-control: private

cache

-control: proxy-revalidate

cache

-control: max

-age

=cache

-control: s-maxage

=

可快取性指令

過期指令:

其他:

示例:

cache

-control: no-store

cache

-control: no-cache, no-store, must-revalidate

cache

-control:public, max

-age

=31536000

cache

-control: no-cache

需要進行比較判斷是否可以使用,瀏覽器第一次傳送請求後,伺服器返回乙個快取標識,在第二次請求的時候傳送這個快取標識,伺服器對比,如果判斷相同後返回304狀態嗎,瀏覽器就可以使用快取資料了;在成功的情況下大家都只有http頭部資訊;

關於這裡的快取標識存在兩種型別,就是

last-modified/if-modified-since:

在伺服器返回相應資源的時候在頭部資訊當中帶上last-modified屬性告訴瀏覽器,這個資源最後的修改時間,瀏覽器再次請求的時候會傳送頭部資訊帶上if-modified-since屬性值為上一次伺服器給出的last-modified,伺服器進行匹配,匹配成功則說明資源沒有更改返回304狀態碼,如果發現資源的修改時間大於if-modified-since則說明資源被改動過了,那麼就會返回完整的資源和200狀態碼,並在頭部資訊中返回last-modified屬性,瀏覽器也會更新相應的資源狀態,在下次的if-modified-since中使用上一次伺服器返回的last-modified值;

etag/if-none-match:

etag是實體標籤(entity tag)的縮寫,是伺服器資源的唯一識別符號。在資源的各個生命週期中,它都具有不同的值,用於標識出資源的狀態。當資源發生變更時,如果其頭資訊中乙個或者多個發生變化,或者訊息實體發生變化,那麼etag也隨之發生變化。大概的伺服器與瀏覽器的etag/if-none-match與last-modified/if-modified-since相同。

需要注意的點是:

1. etag/if-none-match的優先順序高於last-modified/if-modified-since

2. 如果內容發生了變化,使用etag有助於防止資源的同時更新相互覆蓋(空中碰撞)

3. last-modified 標註的最後修改時間只能精確到秒,如果有些資源在一秒之內被多次修改的話,他就不能準確標註檔案的新鮮度而etag能做到

4. 語法,強弱校驗器

etag: w/""

etag: ""

『w/』(大小寫敏感) :表示使用弱驗證器。 弱驗證器很容易生成,但不利於比較。 強驗證器是比較的理想選擇,但很難有效地生成。 相同資源的兩個弱etag值可能語義等同,但不是每個位元組都相同。

etag_value:實體標籤唯一地表示所請求的資源。 它們是位於雙引號之間的ascii字串(如「675af34563dc-tr34」)

5.etag並沒有規範的生成方式,etag值可以是唯一標識資源的任何東西,如持久化儲存中的某個資源關聯的版本、乙個或者多個檔案屬性,實體頭資訊和校驗值,也可以計算實體資訊的雜湊值。有時候計算etag的代價很大(雜湊演算法),有時候代價很小,所以就需要考慮在代價很大的時候通常將計算出的值儲存下來,而在計算代價小的時候則通過每次去重新計算。

so,很明顯在協商快取中,etag的代價比last-modified/if-modified-since大,但是更精確,etag的應用範圍也更廣,在專案中根據情景去使用了;

另外關於強快取與協商快取應該是並存公用的,瀏覽器會先檢查強快取,當強快取命中的時候就會直接去載入資源,沒有命中的情況下會進行協商快取;

HTTP瀏覽器快取機制

來自 瀏覽器快取機制 瀏覽器快取機制,其實主要就是http協議定義的快取機制 如 expires cache control等 但是也有非http協議定義的快取機制,如使用html meta 標籤,web開發者可以在html頁面的節點中加入標籤,如下 上述 的作用是告訴瀏覽器當前頁面不被快取,每次訪...

瀏覽器HTTP快取機制

介紹http快取之前先簡單說一下web快取 web快取是一種儲存web資源副本並在下次請求時直接使用該副本的技術。web快取可以分為這幾種 瀏覽器快取 cdn快取 伺服器快取 資料庫資料快取 因為可能會直接使用副本免於重新傳送請求或者僅僅確認資源沒變無需重新傳輸資源實體,web快取可以減少延遲加快網...

http快取 瀏覽器快取

如果以下題目都能快速回答,那此文章也就沒有必要要看啦 1.講一下http快取 強快取,協商快取 2.如何控制強 協商快取 expires,cache control,etag if none match,if modified sine last modified 3.cache control有哪...