【发布时间】:2016-03-16 00:36:54
【问题描述】:
Spring Security 默认添加以下缓存头:
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
这对我们的 HTML 页面来说是一个很好的设置。对于静态资源(图像、CSS 等),我们希望将它们缓存起来。根据Spring documentation可以这样配置:
@EnableWebMvc
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry
.addResourceHandler("/resources/**")
.addResourceLocations("/resources/")
.setCachePeriod(31556926);
}
}
这会产生以下 HTTP 标头:
Cache-Control: max-age=604800
Pragma:
Expires: 0
这很好,除了 Expires 标头,它仍然指示不应缓存文档。 (标准规定max-age 优先于Expires。但我们的中间缓存仍将其视为不可缓存。)
我们如何删除可缓存文档的Expires 标头(或将其设置为空白)?如果我们配置了缓存周期,为什么Spring不删除它?
【问题讨论】:
-
你用的是什么版本的spring-web?如果您使用的是 spring-web-4.2.5.RELEASE.jar ,您可能会遇到jira.spring.io/browse/SPR-14005 你能看看 spring-web-4.2.4.RELEASE.jar 是否出现同样的问题
-
我们仍然是 4.2.4。所以它与 SPR-14005 无关。然而,在一个 bug 的 cmets 中,有一个如何从 Spring Security 中排除某些资源的示例。这对我们来说是一个可行的解决方案。你想添加是作为答案吗?无论如何感谢您的链接。
-
感谢您的回复和反馈。请不要在该 JIRA 上使用解决方法。详情见我的回答
标签: java spring http spring-mvc spring-security