spring引导缓存控制头

bybem2ql  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(226)

当使用internet explorer时,我有一个问题,当刷新一个页面,使一些图标消失,一些字体无法正常加载。经过一番研究,我发现这很可能与 Cache-Control 收割台的 no-store 我不久前添加的指令,它将包含在默认http响应中。为了解决这个问题,我正在尝试重新配置我的默认响应,使静态资源具有以下缓存控制头:

Cache-Control: no-cache, max-age=0, must-revalidate

而不是非静态资源的默认值:

Cache-Control: no-cache, no-store, max-age=0, must-revalidate

我有一个spring引导应用程序,其中的cache-control头针对静态资源进行了如下配置:

@Configuration
public class MvcAngularRouteConfig implements WebMvcConfigurer {

   @Override
   public void addResourceHandlers(ResourceHandlerRegistry registry) {

       registry.addResourceHandler("/**/*.js", "/**/*.css", "/**/*.ttf", "/**/*.woff", "/**/*.woff2", "/**/*.eot",
            "/**/*.svg", "/**/*.png")
            .addResourceLocations("classpath:/public/", "classpath:/public/assets", "classpath:/assets/")
            .setCacheControl(CacheControl.noCache().mustRevalidate()).setCachePeriod(0)
            .resourceChain(true)
            .addResolver(new PathResourceResolver());

       registry.addResourceHandler("/**/*")
            .addResourceLocations("classpath:/public/")
            .resourceChain(true)
            .addResolver(new PathResourceResolver() {
                @Override
                protected Resource getResource(String resourcePath,
                                               Resource location) throws IOException {
                    Resource requestedResource = location.createRelative(resourcePath);
                    return requestedResource.exists() && requestedResource.isReadable() ? requestedResource
                            : new ClassPathResource("/public/index.html");
                }
            });
   }
}

当我使用google chrome收到响应时,我在响应中得到以下安全标头:

Cache-Control: no-cache, must-revalidate
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

使用internet explorer 11和mozilla firefox,我可以得到以下信息:

Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

我想了解的是:
为什么 Cache-Control 在IE浏览器中,我的静态资源响应中完全缺少标题,而在google chrome中,没有缺少标题?
为什么 max-age=0 命令中缺少指令 Cache-Control 使用google chrome时响应中的标题?
如何配置应用程序以使 Cache-Control 标头配置为 Cache-Control: no-cache, max-age=0, must-revalidate 对于所有静态资源?
仅供参考,如果我删除静态资源的资源处理程序注册表并保留spring安全默认值,我会得到一个 Cache-Control: no-cache, no-store, max-age=0, must-revalidate 在所有请求的响应中。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题