本地快取需要高時效性怎麼辦 瀏覽器快取機制

2021-10-14 07:29:41 字數 2767 閱讀 5122

瀏覽器快取策略分為兩種:

強快取協商快取

相同點

如果命中,都是從快取中載入資源

不同點

協商快取會向伺服器發起請求去驗證是否命中快取,而強快取不需要傳送請求

expireshttp/1.0控制網頁快取的字段,其值是伺服器返回改請求結果快取的到期時間,是個絕對時間

expires控制快取的原理,是使用客戶端的時間與伺服器端返回的時間做對比,如果客戶端與伺服器端的時間發生誤差(如時區不同,修改了客戶端時間),那麼強快取就會失效。

為了解決expires的問題,在http/1.1中提出了cache-control用於控制網頁快取

主要取值

expires和cache-control:max-age=*** 的作用是差不多的,區別就在於expireshttp1.0的產物,cache-controlhttp1.1的產物。

兩者同時存在的話,cache-control優先順序高於expires

在某些不支援http1.1的環境下,expires就會發揮用處。所以expires其實是過時的產物,現階段它的存在只是一種相容性的寫法

瀏覽器快取存放位置

本地快取分為記憶體快取(from memory cache)和硬碟快取(from disk cache)

記憶體快取

記憶體快取具有兩個特點:

硬碟快取

硬碟快取是直接將快取寫入硬碟中,讀取快取需要對該快取存放的硬碟檔案進行i/o操作,然後重新解析該快取內容,讀取複雜,速度比記憶體快取(memory cache)慢

協商快取就是強制快取失效後,瀏覽器攜帶快取標識向伺服器發起請求,由伺服器根據快取標識決定是否使用快取。

控制協商快取的字段分別為:last-modified/if-modified-sinceetag/if-none-match

其中etag/if-none-match的優先順序更高

last-modified / if-modified-since

last-modified伺服器響應請求時,返回該資源檔案在伺服器最後被修改的時間

if-modified-since則是客戶端再次發起該請求時,攜帶上次返回的last-modified值。

當伺服器收到該請求,並且發現請求頭有if-modified-since欄位時,就會將該值與該資源在伺服器的最後修改時間做對比,如果有更新就重新返回資源,狀態碼為200;如果沒有更新,則返回304,繼續使用快取檔案

etag / if-none-match

etag伺服器響應請求時,返回當前資源檔案的乙個唯一標識(由伺服器生成)

if-none-match是客戶端再次發起該請求時,攜帶上次請求返回的etag

當伺服器接收到請求,並且發現請求頭有if-none-match時,就會將該值與資源在伺服器的etag值做對比,一致則代表資源沒有更新,返回304,使用快取檔案;不一致則重新返回資源檔案,狀態碼為200

設定請求頭

給請求資源增加乙個版本號/隨機數

html中禁用快取

本地快取需要高時效性怎麼辦 快取架構之多級快取

我們之前在快取架構之redis中,主要講解的是redis是如何支援高併發的,它的內部原理的基本思路等。在乙個高併發的系統中,redis就是底層的快取儲存的支援,可以說是重中之重。但是不要以為,做個快取,就是用一下redis就夠了,簡單的快取系統,那麼做自然ok,但是在複雜的高併發情況的,遇到的問題非...

為什麼需要快取記憶體

title 為什麼需要快取記憶體 categories 深入理解計算機系統 我們知道,如果要執行乙個程式,首先得將乙個可執行檔案載入到記憶體當中。那麼問題來了,假如我程式中是要對乙個陣列進行操作,而我陣列的資料又是放在記憶體上的,那麼cpu對每乙個元素進行操作的時候,都要先把資料載入到暫存器上,對暫...

美國是否需要高鐵

現在哪個城市如果沒有通高鐵,都天天盼望著。為什麼呢?乙個字,速度快。因為速度快,體驗就非常好了。這個咱們不用多說。其實當初要搞高鐵,決策層是不願意的。為什麼呢?覺得沒有必要。後來搞了曲線策略,先修城際高鐵,再鼓吹其好處。於是開始大規模修建。中國高鐵這麼好,那麼外國是否需要?按照慣例,所謂外國,都是指...