Я следовал этому руководству по использованию стратегии версии контента весной для статических ресурсов. Все работает как задумано, за исключением углового случая, который я не знаю, как исправить:
В моем HTML есть <link>
к CSS-файлу, a.css
. Если я посмотрю на html, возвращенный сервером, то увижу, что ссылка была преобразована в a- (md5) .css, как и должно быть. У меня проблема в том, что a.css
импортирует b.css
. Spring также корректно обновляет импорт с @import '/css/b.css'
до @import '/css/b-(md5).css'
Проблема появляется при обновлении b.css
. Поскольку md5 a.css
одинаково (@import соответствует статическому имени), браузер кэширует запрос a-(md5).css
, который по-прежнему указывает на разрешенный b-(old-md5).css
, и я получаю неправильный стиль
Это звучит как общая проблема. Как это можно исправить?
Можно ли сказать стратегии версий вычислять md5 после разрешения ссылок так, чтобы, если 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());
}