瀏覽器中F5和CTRL F5的行為區別及如何強制更新資源


一、瀏覽器中F5和CTRL F5的行為區別 

  我們直接來看效果,下面是我打開qq網頁,分別使用F5和CTRL F5,我們來看區別。

F5:

 

CTRL F5:

 

區別:

  首先直觀上的區別是CTRL F5明顯比F5加載速度慢了。觀察資源加載發現,F5中大部分資源的狀態碼都是304,也就是重定向,使用了很多緩存資源;而CTRL F5中所有資源狀態碼都是200,都是重新下載了資源。

1.F5使用緩存,並且只有在資源內容發生變化的時候才會去更新資源

當刷新一個頁面的時候,瀏覽器會嘗試使用各種類型的緩存,並且會發送If-Modified-Since頭到服務器,如果服務器返回304 Not Modified,那么瀏覽器會使用本地的緩存;如果服務器返回200 OK和資源內容,那么瀏覽器會使用返回的資源內容,並把資源內容進行緩存,待下次使用。

注:刷新頁面,會讓瀏覽器向服務端發起驗證,忽略 max-age

2.CTRL-F5 強制更新頁面資源的緩存

MSIE會發送Cache-Control: no-cache頭,Firefox和Chrome除了發送Cache-Control: no-cache頭之外,還會發送Pragma: no-cache頭。Opera比較另類,不發送任何和緩存相關的頭。

 

二、如何強制更新資源

1.加上請求頭If-Modified-Since和Cache-Control

  下面我們來看CTRL F5是如何做到強制更新資源而不適用緩存的。

  我們看上面例子如何做到的

  我們發現http請求頭中多了cache-control:no-control;如果服務器響應頭中規定了Last-Modified,我們還需要在http頭部加上If-Modified-Since:0。

  在ajax中可以使用setRequestHeader()方法。

  注:no-cache 並不是說「不緩存」,它意味着使用緩存前必須檢查(或者說驗證)這個資源在服務端是否有更新。no-store 用來告知瀏覽器完全不要緩存這個資源。類似的,must-revalidate 並不是說「每次都要驗證」,它意味着某個資源在本地已緩存時長短於 max-age 指定時長時,可以直接使用,否則就要發起驗證。   

2.meta方法

<META HTTP-EQUIV="pragma" CONTENT="no-cache"> 
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"> 
<META HTTP-EQUIV="expires" CONTENT="0">

 

3.清理form表單的臨時緩存

<body onLoad="javascript:document.yourFormName.reset()">

其實form表單的緩存對於我們書寫還是有幫助的,一般情況不建議清理,但是有時候為了安全問題等,需要清理一下!

 

4.隨機數或者隨機時間

URL 參數后加上 "?ran=" + Math.random(); //當然這里參數 ran可以任意取了
在 URL 參數后加上 "?timestamp=" + new Date().getTime(); 

 

 

參考資料:http://weizhifeng.net/difference-between-f5-and-ctrl-f5.html

       http://www.haorooms.com/post/js_llq_hc


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM