在Spring Boot中启用Http Cache

时间:2016-04-18 19:36:56

标签: java spring rest spring-mvc http-caching

从我的客户端我正在查询服务器中的一些枚举。现在,我想在服务器上查询一次这些枚举后立即在客户端中缓存这些枚举。

我尝试按如下方式设置Cache-Control

@CrossOrigin
@RequestMapping(value = "enums/{name}", method = RequestMethod.GET)
public List<String> getEnums( @PathVariable("name") String name, final HttpServletResponse response) {
    response.setHeader("Cache-Control", "max-age=3600");
    return myservice.findAllEnums(name);
}

似乎使用Cache-control: max-age=3600正确设置了响应标头。我还在我的安全配置中禁用了所有http标头,如下所示:

@Override 
protected void configure(final HttpSecurity http) throws Exception {     
http.headers().cacheControl().disable(); 
}

不幸的是,响应没有在浏览器中缓存。一旦我查询资源,查询就会再次进入服务器。

与此同时,我完全删除了Spring Security,但它仍然无效。 我不明白的是什么?我还需要配置什么?

3 个答案:

答案 0 :(得分:1)

好的,我注意到它正在使用IE,但不适用于Chrome。 Chrome的问题在于,如果您要重新填充页面,它会在请求的标题上设置Cache-control: max-age=0。这显然会阻止数据被缓存。然后我使用指向我的应用程序的超链接创建了一个简单的html,并通过此链接对其进行了重新分析。因此,缓存按预期工作。

答案 1 :(得分:0)

您需要检查是否存在任何重新生成,因为Spring Security设置了无缓存HTTP标头。 您可以在此处获取更多相关信息:How to enable HTTP response caching in Spring Boot

答案 2 :(得分:0)