【问题标题】:Spring MVC : set static files expirationSpring MVC:设置静态文件过期
【发布时间】:2014-12-03 02:45:17
【问题描述】:

如何在spring web application中设置js、css、图片文件过期。我试过<mvc:resources mapping="/resources/**" location="/resources/" cache-period="31556926"/>

但它仍然从浏览器发送请求并且服务器响应304 意味着如果我没记错的话它不使用浏览器缓存。最后它也会向服务器发送一个 HTTP 请求,所以我认为这没有任何用处。

我错过了什么还是有其他的?响应头

Cache-Control:max-age=31556926, must-revalidate
Date:Wed, 03 Dec 2014 03:17:24 GMT
Expires:Thu, 03 Dec 2015 09:06:11 GMT
Pragma:no-cache
Server:Apache-Coyote/1.1
X-XSS-Protection:1; mode=block

【问题讨论】:

  • 您是否检查了响应标头以确保它们设置正确?
  • 编译指示显然对任何支持它的浏览器都没有帮助(并表明其他东西正在修改你的标题)。我会考虑使用适当的拦截器直接在 Spring 中控制标头:stackoverflow.com/questions/1362930/…
  • 我认为这与在mvc:resources 中设置cache-period 相同
  • 似乎您的标头正在配置中的其他地方被修改,并且正在添加 Pragma 标头。该标头通常由禁用缓存的拦截器添加,并且一旦添加就无法完全删除。预期的标准行为没有考虑任何其他正在修改响应的内容。
  • 还有“我错过了什么或者还有其他的吗?”我猜这应该是“方式”?如果是,那么您似乎不太愿意接受其他选择。

标签: spring spring-mvc


【解决方案1】:

您可以尝试编写简单的过滤器类来设置标题:-

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        chain.doFilter(request, response);
         HttpServletResponse res =
              (HttpServletResponse) response;

           String headerName="Cache-Control";
           res.addHeader(headerName,"max-age=31556926");
    }

【讨论】:

    猜你喜欢
    • 2017-04-07
    • 2012-01-24
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 2013-06-12
    • 2017-07-24
    相关资源
    最近更新 更多