我遵循this tutorial在春季针对静态资产使用内容版本策略。一切都按预期工作,但有一个我不知道如何解决的特殊情况:
我的HTML对css文件<link>
具有a.css
。如果查看服务器返回的html,则可以看到该链接已转换为a-(md5).css。我的问题是a.css
导入了b.css
。 Spring还可以将导入从@import '/css/b.css'
正确地更新到@import '/css/b-(md5).css'
,当我更新b.css
时出现问题。由于a.css
的md5相同(@import是静态名称),因此浏览器正在缓存a-(md5).css
的请求,该请求仍指向已解析的b-(old-md5).css
,我结束样式错误
这听起来像是一个常见问题。如何解决?
是否有可能告诉版本策略在解析链接后计算 ,以便如果依赖项的md5更改了,依赖项的md5也会更改吗?
这是我的配置
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//content-based versioning and max caching
registry.addResourceHandler("/**")
.addResourceLocations("classpath:/static/")
.setCacheControl(MAX_CACHE_DURATION)
.resourceChain(false)
.addResolver(new VersionResourceResolver().addContentVersionStrategy("/**"))
.addTransformer(new CssLinkResourceTransformer());
//no cache
registry.addResourceHandler("/*.html").setCacheControl(CacheControl.noCache());
}
答案 0 :(得分:0)
我找不到彻底解决此问题的方法。我的解决方法是禁用所有CSS的缓存
registry.addResourceHandler("/ui/css/**")
.addResourceLocations("classpath:/static/css/")
.setCacheControl(CacheControl.noCache())
.resourceChain(false)
.addResolver(new VersionResourceResolver());