因為如果有了刷新的動作,根據cachecontrol的值伺服器會給瀏覽器返回304協議緩存。原理就是刷新的時候帶著本地文件的版本戳去伺服器請求,伺服器如果比對你確實沒過期,就返回一個304狀態碼使用本地資源。如果過期了,就返回200狀態碼和整個文件。對於這種刷新造成的304,移動端會明顯看出有上下行緩存造成的延遲,美團有通用的解決方案 LsLoader 移動WEB工程化緩存方案美團外賣前端技術棧。
② 前端瀏覽器緩存機制
在前端開發中,性能是一個永恆的話題,沒有最好,只有更好。判斷一個網站性能好壞,一個直入眼觀的即是網頁的反應速度,有一個方式就是使用緩存,一個優秀的緩存策略可以縮短網頁請求的時間,減少延遲,並且網頁可以重復利用,還可以減少帶寬,降低網路負荷。
1: 為什麼需要緩存?
a:緩存可以減少用戶等待時間,提升用戶體驗
b:減少網路帶寬消耗
c:降低伺服器壓力
Note:緩存使用不當,也會造成『臟數據』問題
2:常見的緩存類型
強緩存 -
Expires伺服器端設置,表示該資源的過期時間,會有弊端,客戶端時間和伺服器時間不一致的問題。
Cache-Control:max-age表示緩存資源的最大生命周期,單位是秒
所以Expires 結合 Cache-Control 一起使用,大型網站中一般比較適用
協商緩存-
Last-Modified:值為資源的最後更新時間,隨伺服器response返回
If-Modified-Since:通過比較兩個時間來判斷資源在兩次請求期間是否有過修改,如果沒有,則命中協商緩存
Etag:表示資源內容的唯一標識,即資源的消息摘要
If-None-Match:伺服器通過比較請求頭中的If-None-Match與當前資源的Etag是否一致來判斷資源是否在兩次請求期間有過修改
3:緩存流程圖示:
a:瀏覽器會先檢測強緩存類型(Cache-Control 或者 Expires)是否有效;命中直接瀏覽器本地獲取緩存資源
b:未命中。伺服器會根據請求頭Request Header驗證這個資源是否命中協商緩存,稱之為HTTP二次驗證,命中,伺服器返回請求,但返回資源,而是告訴客戶端直接中直接從瀏覽器緩存中獲取
Note:
1.強緩存不會發生請求,協商緩存存在伺服器請求
2.當協商緩存也未命中時,則伺服器會將資源發送到客戶端
3.F5刷新頁面,會跳過強緩存
4.Ctrl+F5刷新頁面,跳過強緩存和協商緩存
5.不會緩存的情況
HTTPS POST請求 根據Cookie獲取認證信息 Request Header Cache-Control:no-cache, max-age=0
6.小故事大道理
上文對整個概念做了闡述,還是不夠形象,我們來通過幾個小故事生動理解一下:
故事一:Last-Modified
瀏覽器:Hi,我需要 jartto.min.js 這個文件,如果是在 Last-Modified: Fri Feb 15 2019 19:57:31 GMT 之後修改過的,請發給我。
伺服器:(檢查文件的修改時間)
伺服器:Oh,這個文件在那個時間之後沒有被修改過,你已經有最新的版本了。
瀏覽器:太好了,那我就顯示給用戶了。
故事二:ETag
瀏覽器:Hi,我需要 jartto.css 這個文件,有沒有不匹配 3c61f-1c1-2aecb436 這個串的
伺服器:(檢查 ETag…)
伺服器:Hey,我這里的版本也是 3c61f-1c1-2aecb436,你已經是最新的版本了
瀏覽器:好,那就可以使用本地緩存了
③ 前端頁面出來了但數據還沒有出來,有啥辦法可以讓數據一進到頁面就可以拿到
嘗試清除下緩存。
HTML是無法讀取資料庫的,HTML是頁面前端腳本語言,要想從HTML網頁中獲取SQL資料庫里的數據,需要藉助JSP或ASP或PHP或RUBY等語言來實現。
檢查是否有網站被選擇,創建XMLHttpRequest對象,創建在伺服器響應就緒時執行的函數。
④ angularjs state.go 參數 刷新頁面 參數就獲取不到了 怎麼辦
設置路由控制器
$statePrivider.state({})這個方法中的參數是對象,其中有項屬性配置是cache:true/false, ,默認為true。在此,將其配置為false,此時,這個狀態就不會有緩存,也就可以實現每次處於該狀態時刷新頁面,也就相當於實現了強制刷新。
.state('marketBeian', {
url: '/market/beian',
templateUrl: 'views/market/beian.html',
cache:false,
controller: 'MarketBeianCtrl',
data: {
title: '作業備案信息管理'
}
})
⑤ WKWebView網頁緩存刷新問題
在開發過程中遇到前端改變圖片文字,客戶端沒有實時刷新出來,抓包發現也沒有請求網頁相關介面。由於不懂後端的知識,折騰了很久,網上也查找了很多都說需要清除緩存。
這是在網上查找的iOS9以上清除緩存方法
不建議使用上述方法,會浪費用戶流量,除非用戶手動清除緩存。其實主要原因是後端網頁設置的問題,通過head請求獲取介面返回信息如下:
上面標粗的是關鍵,通過測試發現WKWebView是否通過緩存取數據還是重新請求介面取決於 Expires,如上就是緩存時效性是30分鍾,想要實時刷新,可以讓後端不返回這個欄位或者這個過期事件設置短一些,例如1分鍾。建議靜態網頁可以設置長時間,需要實時刷新的建議後端不要設置這個欄位,以免客戶端無法實時顯示。
⑥ 瀏覽器緩存 前端頁面獲取存放token
//sessinonStorage只在當前窗口有效 生命隨瀏覽器關閉終止 容量約5M
window.sessionStorage.setItem("name",'男');
//獲取name
console.log(window.sessionStorage.getItem('name'));
//清空Storage
window.sessionStorage.clear();
//刪除數據
window.sessionStorage.removeItem('age')
先打開a頁面儲存name 在打開桌面b獲取時會獲取不到如下圖
但是在a頁點擊a鏈接跳轉b卻可以獲取到
當跳轉到b時修改name,在返回a頁查看name, a頁並沒有發生改變(這說明a和b頁面不是公用的一個sessionStorage,而是在頁面跳轉時a傳給了b)
//localStorage在關閉瀏覽器後依然有效 容量約20M
//放入緩存中
window.localStorage.setItem('userToken', token);
//獲取
console.log(window.localStorage.getItem("userToken"))
//刪除數據
window.sessionStorage.removeItem('userToken')
⑦ 緩存頁面使得刷新也不會向伺服器提交請求,必須清除緩存後才會從新獲取數據。
您好,很高興為您服務!
是訪問什麼頁面出現這種情況,能提供下鏈接測試下么。還有,安卓版的UC瀏覽器,按返回鍵退出時,會出現提示框提示是否清除記錄,可以勾選進行退出清除。
如果仍有問題,請您繼續向我們反饋,我們會第一時間為您跟進。
⑧ css和index文件都保存過,但是刷新頁面沒有任何效果,最大的可能是什麼
有可能是客戶端緩存問題。
解決方法:
1)CtrlF5,清除瀏覽器緩存(等同於瀏覽器-->歷史數據-->刪除cookies)注意:如果是利用F12中的Disablecache,則需要F12打開控制台才能生效。
2)在js或css後加版本號,這時候瀏覽器客戶端會認為這是不同版本的js或者css文件,會自動重新刷新下載(瀏覽器會緩存下載頁面js和css文件)2.1)形如:.css?v=x或者css?version=x
3)使用gulp等進行前端構建
⑨ 頁面徹底緩存無法刷新,怎麼辦
頁面徹底緩存無法刷新,怎麼辦
有時在處理伺服器頁面如表單時,瀏覽器前進、後退鍵會帶來麻煩,無法使頁面獲取最新的數據,從而會導致意外產生,這時解決辦法有兩種,一是可以利用js禁用前進、後退鍵;二是當點擊前進、後退鍵後自動刷新頁面,那麼就需要禁掉頁面緩存,因為瀏覽器首先會讀取緩存,如果沒有才再請求伺服器;
方法二禁用緩存如下:
客戶端代碼:
⑩ 網站後台更新後看不到前端頁面信息更新的幾點原因
一、網站沒有生產靜態頁面
二、網站後台沒有更新緩存
三、網站模板設置不正確
四、客戶端瀏覽器緩存了網站
五、伺服器或ISP緩存了網站