調整了css或JavaScript、更新了圖片但快取時間還沒到期,即便css、js與圖檔已經更新了,使用者可能看見的仍是舊的內容,原來是 cache 瀏覽器快取的問題。
cache 什麼是瀏覽器快取,瀏覽器快取功能是網頁效能優化的項目之一,使用瀏覽器快取功能如果使用者再次來到您的網站,快取css、js、jpg、png圖檔等靜態資源將能使網頁開啟速度加快,同時也能減少伺服器負擔。若要立即看到最新內容,就必須清除快取或是使用Ctrl+F5強制重新載入頁面,並不是所有的使用者都懂得使用Ctrl+F5這類方式來看到最新的網頁內容
css、js、圖片加上參數防止瀏覽器快取Cache
以下做法只用於html之中的檔名,不是伺服器器上的副檔名動手腳,就算改了也不讓你上傳。
在style.css後方加上”?”以及”自訂字串”,可以是亂數、日期時間、版本編號
例如:
亂數 > style.css?f5V3Ra (隨機亂打就對了)
日期 > style.css?20140627
版本 > style.css?v2.10.1
累加 > style.css?0001 (每改一次+1)
依照自己的更新頻率、習慣或喜好決定使用哪種方式即可,前提是不要與舊版本重複囉
1 | <link rel="stylesheet" type="text/css" href="css/style.css?awooseo-01″ /> |
1 | <script src="js/script.js?rr616″></script> |
同樣方式也適用於圖檔喔
1 | <img src="/images/course1.png?v2″> |
css的用到的圖片也可以
1 | .logo{background:url(../images/logo.png?justin_edit);} |
html 清除網頁 Cache 語法
說明:
no_cache 不保存記憶,每次訪問都刷新頁面,訪問者無法離線瀏覽。
1 2 3 4 5 6 | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="0" /> <meta http-equiv="Cache-Control" content="no-cache" /> or <meta http-equiv="Cache-Control" content="no-cache, must-revalidate"> |
HTML 的 <meta> 與 HTTP 的 header
編寫 HTML 的人可以在文件中 <head> 段落加上一些 tag 來描述這份文件的屬性。這些 meta tag 在使用上通常奠基在「可以把這份文件標記為不可 cache」或是「可以把這份文件標記為在一段時間後過期」的信念上。
meta tag 很容易使用,但不怎麼有效。因為這只對幾個(會實際去讀 HTML)browser cache 有效,對(幾乎不會去讀 HTML)proxy cache 無效。在網頁裡頭試圖放 Pragma:no-cache 的 meta tag 來讓這一頁保持 fresh 狀態,這招未必有用。
Cache-Control HTTP header
有效的 Cache-Control response header 包括下列這些東西:
- max-age=(單位:秒):指定在最長為多少的時間內,該份 representation 會被認為是 fresh。和 Expires 相似,不過這個指令是相對於 request 的時間,而不是絕對時間。等號後方的值是你希望該份 representation 在 request 之後幾秒內會是 fresh 的狀態。
- s-maxage=(單位:秒):與 max-age 相似,但它僅適用於 share cache(如 proxy)。
- public:將認證過的 response 標明為可 cache。一般狀況下如果需要 HTTP 認證,response 會自動變成 private。
- private:允許針對單一使用者的 cache(例如 browser cache)儲存 response,share cache(例如 proxy)則不存。
- no-cache:要求 cache 在每一次發佈被 cache 住的副本之前,先向 origin server 發出 validation 的 request。這有助於確保「有遵循認證過程(結合 public)」與「維持嚴格的 fresh」,卻不損及 cache 的優點。
- no-store:要 cache 不管在任何條件下都不保存 representation 的副本。
- must-revalidate:告訴 cache 要遵從你給予這個 representation 任何 freshness 的資訊。HTTP 允許 cache 在某些特定條件下提供 stale 的 representation,透過指定這個 header 告訴 cache 要嚴格遵守你指定的規則。
- proxy-revalidate:類似 must-revalidate,但僅適用於 proxy cache。
資料來源:
[技術文章] css、js、圖片加上參數防止瀏覽器快取Cache
Cache 教學手冊 [上]
html 清除網頁 Cache