Как перезаписать дубликаты заголовков кэша http в веб-приложении на основе Java? - PullRequest
1 голос
/ 08 ноября 2019

Мы интегрируем веб-пакет в наше устаревшее веб-приложение на основе Java. В качестве первого шага добавлен frontend-maven-plugin для установки node, npm и webpack. Умеет связывать JS и CSS хорошо.

Я также использую очистку кэша в веб-пакете. Связанные js и css хэшируются и имеют имя в формате bundle.hash.js. И я написал собственный тег для JSP, чтобы передать параметр и получить хэшированный файл. Кажется, все это работает нормально, теперь идея состоит в том, чтобы установить длинный кеш на год для связанных файлов.

Я написал специальный фильтр, который реализует javax.servlet.Filter и устанавливает заголовки кеша. И добавил этот фильтр для сопоставлений js, css в web.xml

int cacheAge = 31536000; // setting long year cache
  response.setHeader("Cache-Control", "max-age="+ cacheAge);

Проблема в том, что когда я запускаю приложение для файла bundle.hash.js, устанавливаются 2 элемента управления кэшем. В результате файл комплекта. *. Js не кэшируется. Для bundle.hash.css устанавливается максимальный возраст 31536000, как и ожидалось, и он кэшируется браузером.

cache-control: max-age=31536000
cache-control: no-cache, no-store, max-age=0, must-revalidate

Я не могу понять, как и откуда устанавливается no-cache, max-age = 0 для файлов js. Интересно, узел / webpack устанавливает его под капотом? Если так, как я могу переопределить это в Фильтре сервлета?

1 Ответ

0 голосов
/ 10 ноября 2019

Наконец-то разобрался, потратив несколько часов. Spring security добавляет заголовок no-cache, max-age = 0, хотя я установил max-age в фильтре сервлета. Я установил для безопасности значение none в файле context.xml для файлов комплекта в каталоге dist dir и, похоже, работает нормально.

...