【发布时间】:2011-03-04 13:44:35
【问题描述】:
如何在 JSP 中添加 Expires 或 Cache-Control 标头?我想在包含页面中为我的静态组件(例如图像、CSS 和 JavaScript 文件)添加一个遥远的到期日期。
【问题讨论】:
标签: java jsp http cache-control
如何在 JSP 中添加 Expires 或 Cache-Control 标头?我想在包含页面中为我的静态组件(例如图像、CSS 和 JavaScript 文件)添加一个遥远的到期日期。
【问题讨论】:
标签: java jsp http cache-control
<%
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
%>
【讨论】:
要禁用 JSP 页面的浏览器缓存,请创建一个映射到 *.jsp 的 url-pattern 的 Filter,并在 doFilter() 方法中基本上执行以下操作:
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1
httpResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0
httpResponse.setDateHeader("Expires", 0); // Proxies.
这样您就不需要将它复制粘贴到所有 JSP 页面上并用 scriptlet 将它们弄得一团糟。
要为 CSS 和 JS 等静态组件启用浏览器缓存,请将它们全部放在一个公共文件夹中,例如 /static 或 /resources,并创建一个映射到 url-pattern 或 /static/* 或 @ 的 Filter 987654334@ 并在doFilter() 方法中基本上执行以下操作:
httpResponse.setDateHeader("Expires", System.currentTimeMillis() + 604800000L); // 1 week in future.
另见:
【讨论】:
// Set IE extended HTTP/1.1 no-cache headers (use addHeader). res.addHeader("Cache-Control", "post-check=0, pre-check=0");
像 Tomcat 这样的 Servlet 容器带有一组预定义的过滤器。参见例如Expires Filter。使用现有的过滤器可能比创建自己的类似过滤器更容易。
【讨论】:
<%
response.setHeader("Cache-Control", "no-cache"); //HTTP 1.1
response.setHeader("Pragma", "no-cache"); //HTTP 1.0
response.setDateHeader("Expires", 0); //prevents caching at the proxy server
%>
【讨论】: