處理客戶端暫存問題 clientCache
最近遇到一個問題,就是我們更新了CSS上去之後無法吃到CSS。
電腦版的話還好解決,因為使用無痕視窗就可以躲避這個問題。
但是手機(某些貌似沒有無痕? iphone?)
而且這也是治標不治本,因為是上線途中的程式,所以可能有些user已經抓住cache了,因此改版他們也吃不到,上網找了之後發現可以設定iis來讓clientCache清除重新抓。
開啟IIS 選取目標網站 > Http回應標頭
所以也不確定到底原因為何
順帶一提,也可以直接下code在web.config裡面
這是一小時
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="01:00:00" /></staticContent>
這是立刻
<staticContent>
<clientCache cacheControlMode="DisableCache" />
</staticContent>
------------------------------------------------------------------------------------------------HTTP Header 有不少與 Cache 管理有關,協助瀏覽器用 Cache 減少網路傳輸量,例如:Cache-Control、If-Modified-Since、ETag… 等。要了解這些技術細節,推薦幾篇文章:
IIS 預設藉由 ETag 及 If-Modified-Since 讓靜態內容(HTML、JPG、PNG、GIF、CSS、JS...)平時可以被 Cache,但是檔案只要有更新就重新讀取。
以上是IIS的理論基礎
而實際案例則由 這篇 測試結果
他測試的方法是,一開始先丟一篇Index.html上去,為5880個字元,接著再丟一個多一個空白的Index.html上去覆蓋。
並且用F12 開發者工具調整設定 Disable Cache、開啟Preserve Log,並測試三次。
為了測試,開始前先清空Cache,因此第一次要由Chrome向IIS取得完整資料
第二次則是IIS回傳304 通知 Chrome使用Cache
第三次則是修改Index.html加入一個空白字元並存檔。
第一次
他設定的邏輯為,在 "設定時間的期限內 不會再次發送Response給IIS要求更新,都是用Cache更新"。
但是實際測試結果之後貌似沒有讀取新的CSS,這就不太確定是什麼原因了。
可能要像這篇文的版主一樣抓開發者工具一樣一行一行看NetWork裡面捕捉到的值
可能要像這篇文的版主一樣抓開發者工具一樣一行一行看NetWork裡面捕捉到的值
順帶一提,還有一種方法是上版號
比如讀取的時候是這樣
<script src="assets/js/jquery.min.js"></script>
就會變成
<script src="assets/js/jquery.min.js?20230612"></script>
就會變成新檔了
還有一個方法貌似是清除IIS Cache
1. 進入 IIS ,停止目標站台
2. 進入 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files,清除此路徑下的檔案 (Framework 版本可能不同,上述路徑的 v4.0.30319 指的是 4.0 版,若有多個版本資料夾,那只需要清除目標站台所使用的版本資料夾即可)
3. 啟動目標站台
這樣看起來應該是重新build站台,假如說你的站台是可以暫停更新的,用這個方法應該也可以
參考
https://learn.microsoft.com/en-us/iis/configuration/system.webserver/staticcontent/clientcache?WT.mc_id=DOP-MVP-37580
https://blog.darkthread.net/blog/iis-static-content-cache/
https://blog.techbridge.cc/2017/06/17/cache-introduction/
https://dotblogs.com.tw/brian/2012/10/30/79752
留言
張貼留言