【发布时间】:2017-05-21 15:00:21
【问题描述】:
我通过 Spring @Controller 提供来自文件系统的文件,并且我希望尽可能地利用浏览器缓存。
这是处理请求的方法:
@ResponseBody
@GetMapping(value = "/file/{f:.*}")
public FileSystemResource getFile(@PathVariable("f") String fileName, HttpServletResponse response) {
File file = new File("/folder/" + fileName);
response.setHeader("Cache-Control", CacheControl.maxAge(7, TimeUnit.DAYS).cachePrivate().getHeaderValue());
response.setDateHeader("Last-Modified", file.lastModified());
response.setHeader("ETag", "" + file.lastModified());
return new FileSystemResource(file);
}
浏览器应该永远缓存这些文件,除非它们自上次请求以来在文件系统上被修改过。
我不知道如何设置Cache-Control 和Expires。
如何设置它们,我需要添加哪些标头才能获得所需的行为?
请注意,我还使用Spring Security,默认情况下会添加以下标头:
Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Expires:0
Pragma:no-cache
这些标题对于“普通”页面来说很好,但我不希望它们用于上面显示的处理 /file/** 的方法。
【问题讨论】:
标签: java spring http-caching