如何Cache-Control在Spring Boot中为静态资源添加HTTP标头?
Cache-Control
尝试在应用程序中使用过滤器组件,该组件可以正确写入标头,但Cache-Control标头会被覆盖。
@Component public class CacheBustingFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletResponse httpResp = (HttpServletResponse) resp; httpResp.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); httpResp.setHeader("This-Header-Is-Set", "no-cache, no-store, must-revalidate"); httpResp.setHeader("Expires", "0"); chain.doFilter(req, resp); }
我在浏览器中得到的是:
Cache-Control:no-store This-Header-Is-Set:no-cache, no-store, must-revalidate Expires:0
我想要的是:
Cache-Control:no-cache, no-store, must-revalidate This-Header-Is-Set:no-cache, no-store, must-revalidate Expires:0
根据文档,ResourceHandlerRegistry。这很容易。(我现在没有与此相关的代码。)
ResourceHandlerRegistry
在您配置静态资源的地方,只需添加addResourceHandler方法,它将返回ResourceHandlerRegistration对象。
addResourceHandler
ResourceHandlerRegistration
在那里您可以使用setCacheControl方法。您要做的是配置和设置CacheControl对象。
这是从4.2版本开始 ,否则您将需要像下面这样。
@Configuration @EnableWebMvc @ComponentScan("my.packages.here") public class WebConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**").setCachePeriod(0); } }