快取驗證 Last Modified Etag

2021-09-24 12:18:22 字數 2039 閱讀 4620

上篇文章我們知道,當我們給catch-control 設定了 no-catch 後,每次瀏覽器對這個資源的請求時,都會到伺服器端進行資源驗證,驗證完之後,如果確定這個資源可以使用快取,瀏覽器才會讀取本地的快取。

下面是瀏覽器請求資料過程中關於快取的步驟。

進行資料驗證,主要是有兩個header: last-modified 與 etag .

last-modified 即上次修改時間。

它主要配合if-modified-since 或者 if-unmodified-since 這兩個header 使用。

(如果我們請求的乙個資源,它返回的header 中有last-modified 並指定了乙個時間;那麼下次瀏覽器再傳送這個請求的時候就會帶上這個時間,並把它放在 if-modified-since(通常) 或者 if-unmodified-since 這兩個header中;伺服器就可以根據if-modified-since 或者 if-unmodified-since 這兩個header的值對比資源上次修改的時間,如果兩個時間一致,那麼就可以使用快取)

etag 它是乙個更為嚴格的驗證

它是用過資料簽名的方式驗證

它根據資料內容產生乙個唯一的編碼(資料不同,編碼結果不同)。最典型的做法,是我們對資料內容做乙個雜湊計算。

它主要配合 if-match 或者 if-none-match 使用。

同上,通過對比資源的簽名判斷是否使用快取。

下面我們來實驗一下。

server.js 如下

testmaxage.html 如下

hello world

don't speak

好的,我們來啟動服務。

開啟localhost:8888 頁面。

重新整理兩次頁面後,我們可以看看 script.js 請求。確實是有 if-modified-since 和 if-none-match 的。

但是,這時候,這個請求還是會返回資料。

我們希望驗證通過伺服器端就不要返回資料了。

這時候,我們重新整理兩次瀏覽器,會發現在控制台仍然會有返回資料,這其實是瀏覽器將命中快取中的資料顯示出來的。瀏覽器實際上是根據http code 304,來認定使用快取資料的(當我們在304時,返回其他資料,會直接被忽略)。

done.

MyBatis 快取詳解 一級快取驗證

基於mybatis standalone 工程,注意演示一級快取需要先關閉二級快取,localcachescope 設定為session 判斷是否命中快取 如果再次傳送sql 到資料庫執行,說明沒有命中快取 如果直接列印物件,說明是從記憶體快取中取到了結果。1 在同乙個session 中共享 2 不...

快取驗證Last Modified和Etag的使用

快取工作示意圖 瀏覽器建立乙個請求,然後請求到達本地快取,如果找到了則直接返回給瀏覽器,如果沒有,可能會經過 服務,然後去 快取中去找,如果命中,則直接返回,如果沒有,才會到源伺服器進行請求。在http協議裡面,資料的驗證方式,主要有兩個驗證頭 last modified 和 etag。last m...

快取驗證Last Modified和Etag的使用

快取工作示意圖 在http協議裡面,資料的驗證方式,主要有兩個驗證頭 last modified 和 etag。last modified 配合last modified since或者if unmodified since使用,對比上次修改的時間驗證資源是否需要更新。etag 是乙個更加嚴格的資料...