作者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://webptt.com/cn.aspx?n=bbs/java/M.1534402693.A.371.html
※ 编辑: lueichun (1.167.49.33), 08/16/2018 17:31:21
1F:→ ssccg: 你要避免被快取的是资源档,那跟jsp和controller就没关系 08/16 20:42
2F:→ ssccg: url加版本号也不是像你加个1,通常是加乱数或时间吧... 08/16 20:43
3F:→ ssccg: 最後那个dispatchServlet的pattern改成*.do不就显然不会 08/16 20:45
4F:→ ssccg: match到.css或.js,那就不会经过webContentInterceptor 08/16 20:45
5F:→ ssccg: 从你的描述看起来你需要先知道link resource跟主页面是分开 08/16 20:55
6F:→ ssccg: 的http request/response,你要处理的是resource就要从 08/16 20:57
7F:→ ssccg: resource会经过的处理路径下手 08/16 20:57
OK了,谢谢
8F:→ Chris926926: 用一个filter过滤所有的request?不知道可不可以达到 08/16 22:58
9F:→ Chris926926: 目的 08/16 22:58
10F:→ AndCycle: 你要先搞懂浏览器怎麽发 req 跟收到 resp 的行为... 08/16 23:48
11F:→ AndCycle: Chrome 打开, F12 开发者工具, Network 那个分页先看懂 08/16 23:49
12F:→ AndCycle: 弄懂了再去 google "HTTP Caching" 08/16 23:50
13F:推 Jichang: 推一下 ss 大大解释的真清楚 … 08/18 08:48
※ 编辑: lueichun (1.162.223.177), 08/18/2018 12:17:59