Включение кэширования браузера с помощью java
-
11-09-2019 - |
Вопрос
Хорошего дня,
Я использую Кэш - фильтр чтобы отфильтровать определенный путь к моему серверу (который выводит поток изображений в поток ответов).И я настроил его в своем web.xml следующим образом:
<filter>
<filter-name>imagesCache</filter-name>
<filter-class>com.samaxes.cachefilter.presentation.CacheFilter</filter-class>
<init-param>
<param-name>privacy</param-name>
<param-value>public</param-value>
</init-param>
<init-param>
<param-name>expirationTime</param-name>
<param-value>2592000</param-value>
</init-param>
</filter>
...
<filter-mapping>
<filter-name>imagesCache</filter-name>
<url-pattern>/my/path/*</url-pattern>
</filter-mapping>
Используя мой firefox, если я получаю доступ к своему URL-адресу через адресную строку, он попадает на сервер в первый раз, но использует кэш во время последующих вызовов.Однако, если URL-адрес находится внутри моей страницы (т.е. <img src="..."/>
), кажется, что он постоянно попадает на сервер.
[РЕДАКТИРОВАТЬ] После еще нескольких тестов доступ к моему изображению через адресную строку работает не всегда.Но кэширование , похоже , работает с ним чаще , чем .Что касается того, действительно ли это так, я не уверен.
Дополнительная информация:мой путь - это что-то вроде /my/path?then=some&query=строки.Обратите внимание, что у него нет расширения (т. е.gif, png, jpeg), но его тип mimetype установлен правильно (изображение / gif, image /png, image / jpeg).Я не уверен, оказывает ли отсутствие расширения или наличие строк запроса какое-либо влияние.(Кроме того, еще одно замечание.хотя в моем URL-адресе есть строки запроса, я снова и снова использую один и тот же uri + строку запроса в своих тестах).
Есть какие-нибудь идеи, почему?
Спасибо
Решение
Вы хотите особо обратить внимание на любой заголовок управления кэшем в вашем запросе.Если в запросе указано что-то вроде Cache-Control:отсутствие кэша или контроля кэша:max-age= 0, тогда кэши не могут обслуживать кэшированную копию.Или, если в ответе есть заголовок Expires, который слишком близок по времени, то он не может быть кэширован надолго.
Полный список заголовков и пояснений содержится в спецификации HTTP 1.1.Видишь Кэширование в HTTP (13) и Определения полей заголовка (14)
Тот Самый Подключаемый модуль Firebug это один из хороших способов проверить заголовки запросов и ответов с помощью Firefox.
Также следите за тем, как вы используете Firefox.Нажатие кнопки обновить эквивалентно произнесению Cache-Control:no-cache - это говорит о том, что вам нужна как можно более свежая копия, которая приведет вас обратно на ваш исходный веб-сервер.
Другие советы
Я бы исследовал отправляемый HTTP-запрос, особенно HTTP-заголовки, отправляемые для этого запроса изображения.Вы можете использовать Плагин Firefox, и/или проверьте заголовки на конце сервлета (в HttpServletRequest
объект)