瀏覽器的「重新整理」 「快取機制」

2021-08-25 20:31:48 字數 1665 閱讀 4352

1)last-modified

在瀏覽器第一次請求某乙個url時,伺服器端的返回狀態會是200,內容是你請求的資源,同時有乙個last-modified的屬性標記此檔案在服務期端最後被修改的時間,格式類似這樣:

last-modified: fri, 12 may 2006 18:53:33 gmt

客戶端第二次請求此url時,會在頭部加入乙個屬性,詢問該時間之後檔案是否有被修改過:

if-modified-since: fri, 12 may 2006 18:53:33 gmt

如果伺服器端的檔案沒有被修改過,則返回狀態是304,內容為空,這樣就節省了傳輸資料量。如果伺服器端的檔案被修改過,則返回和第一次請求時類似。

etag

和last-modified類似,由於rfc2616(也就是http/1.1)中沒有說明etag該是什麼格式的,只要確保用雙引號括起來就行了,所以你可以用檔案的hash,甚至是直接用last-modified,以下是伺服器端返回的格式:

etag: "50b1c1d4f775c61:df3"

客戶端的查詢更新格式是這樣的:

if-none-match: w/"50b1c1d4f775c61:df3"

如果etag沒改變,則返回狀態304然後不返回,這也和last-modified一樣。

expires

這個屬性就如我們在asp中使用httpresponse.expiresabsolute一樣直接,宣告某某時刻過期之後瀏覽器就應該重新請求該url,使用格式為:

expires: sun, 10 feb 2002 16:00:00 gmt

注意httpresponse.expiresabsolute在asp.net中是不建議使用的,現在我們應該使用的是httpresponse.cache.setexpires。

pragma

通常我們用到的值就是no-cache,這和在cache-control中使用no-cache值是一樣的,cache-control在下面講。pragma的使用格式如下:

pragma: no-cache

cache-control

這是乙個集合型屬性,它裡面能夠包含很多子屬性,並且允許使用者擴充套件新的子屬性。常見的子屬性包括:

max-age - 以秒為單位的超時,覆蓋expires屬性。

public - 允許儲存在共享快取中。

private - 只允許儲存在私有快取中。

no-cache - 不允許快取。

no-store - 不允許快取在持久介質中。

no-transform - 不允許轉換儲存系統。2)

眾所周知瀏覽器是通過last-modified和expires來處理快取的,而在具體除錯中發現並不按我們想象的方式進行,其原因很有可能是在重新整理瀏覽器的時候採用不恰當的方式導致。對於大多數瀏覽器而言,都包含有三種重新整理方式,以下我們以ie瀏覽器為例:

f5 重新整理

ctrl+f5 重新整理

「轉至」或位址列裡回車 重新整理

這些快捷鍵的功能,主流瀏覽器都是相同的。

而這三種重新整理方式會導致瀏覽器採取不同的快取機制:

f5:不允許瀏覽器直接使用本地快取,因此last-modified能起作用,但expires無效

ctrl+f5:是強制重新整理,因此快取機制失效

「轉至」或位址列裡回車:正常的訪問,last-modified和expires都有效

瀏覽器快取機制

最近在準備優化日誌請求時遇到了一些令人疑惑的問題,比如為什麼響應頭里出現了兩個 cache control 為什麼明明設定了 no cache 卻還是發請求,為什麼多次訪問時有時請求裡帶了 etag,有時又沒有帶?等等。後來查了一些資料以及同事親自驗證,總算對這些問題有了個清晰的理解,現在整理出來以...

瀏覽器快取機制

當我們瀏覽乙個頁面發現有異常時,通常考慮的就是書不是瀏覽器做了快取呢,按ctrl f5重新請求一次就能請求到沒有快取的頁面,這個是為什麼呢。首先,ctrl f5組合鍵重新整理頁面,那麼瀏覽器會直接向目標url傳送請求,而不再使用瀏覽器快取的資料。其次,當請求到達伺服器端依然有可能出現使用伺服器端的資...

瀏覽器快取機制

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