作者lueichun (no anonymous)
看板java
標題[問題] 避免瀏覽器快取靜態資源
時間Thu Aug 16 14:58:10 2018
我使用Spring 4來寫一些簡單的範例,
然後想加入「避免瀏覽器快取」的功能,
一開始是在jsp檔內加入
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
<META HTTP-EQUIV="EXPIRES" CONTENT="0">
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
沒用
後來在靜態資源的url尾端加上版本號:
<link href="<c:url value='/resources/core/css/bootstrap.min.css?1'/>"
rel="stylesheet" />
<script src="<c:url
value='/resources/core/js/jquery.1.10.2.min.js?1'/>"></script>
還是沒用
接著在controller的方法內加入:
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setHeader("Expires", "0");
仍然沒用
最後是在Spring設定檔加入
webContentInterceptor才成功避免瀏覽器快取資源
請問為什麼前3種方法都沒用,一定要用Spring自帶的物件才行呢?
---------------------------------------------------------------
剛剛又發現,如果把web.xml內處理請求的dispactherServlet
其<url-pattern>/</url-pattern>
改成<url-pattern>*.do</url-pattern>
的話,禁止瀏覽器快取的功能就又失效。這到底是為什麼?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.167.49.33
※ 文章網址: https://www.ptt.cc/bbs/java/M.1534402693.A.371.html
※ 編輯: lueichun (1.167.49.33), 08/16/2018 17:31:21
→ ssccg: 你要避免被快取的是資源檔,那跟jsp和controller就沒關係 08/16 20:42
→ ssccg: url加版本號也不是像你加個1,通常是加亂數或時間吧... 08/16 20:43
→ ssccg: 最後那個dispatchServlet的pattern改成*.do不就顯然不會 08/16 20:45
→ ssccg: match到.css或.js,那就不會經過webContentInterceptor 08/16 20:45
→ ssccg: 從你的描述看起來你需要先知道link resource跟主頁面是分開 08/16 20:55
→ ssccg: 的http request/response,你要處理的是resource就要從 08/16 20:57
→ ssccg: resource會經過的處理路徑下手 08/16 20:57
OK了,謝謝
→ Chris926926: 用一個filter過濾所有的request?不知道可不可以達到 08/16 22:58
→ Chris926926: 目的 08/16 22:58
→ AndCycle: 你要先搞懂瀏覽器怎麼發 req 跟收到 resp 的行為... 08/16 23:48
→ AndCycle: Chrome 打開, F12 開發者工具, Network 那個分頁先看懂 08/16 23:49
→ AndCycle: 弄懂了再去 google "HTTP Caching" 08/16 23:50
推 Jichang: 推一下 ss 大大解釋的真清楚 … 08/18 08:48
※ 編輯: lueichun (1.162.223.177), 08/18/2018 12:17:59