看板 java 關於我們 聯絡資訊
我使用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