Включение кеширования браузера через Java
Добрый день,
Я использую CacheFilter для фильтрации определенного пути к моему серверу (который выводит поток изображений в поток ответов). И я настроил его в своем файле 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 = strings. Обратите внимание, что у него нет расширения (например, gif, png, jpeg), но его mimetype установлен правильно (image / gif, image / png, image / jpeg). Я не уверен, влияют ли отсутствие расширения или наличие строк запроса. (Также еще одно примечание. Хотя в моем URL есть строки запроса, я использую одну и ту же строку запроса uri + снова и снова в своих тестах).
Есть идеи почему?
Спасибо
2 ответа
Вы хотите особенно искать любой заголовок Cache-Control в вашем запросе. Если запрос говорит что-то вроде Cache-Control: no-cache или Cache-Control: max-age=0, то кэши не могут обслуживать кэшированную копию. Или, если ответ имеет заголовок Expires, который слишком близок по времени, он не может долго сохраняться в кэше.
Полный список заголовков и пояснений приведен в спецификации HTTP 1.1. См. Кэширование в HTTP (13) и Определения полей заголовка (14)
Плагин Firebug - это хороший способ проверить заголовки запросов и ответов с помощью Firefox.
Также следите за тем, как вы используете Firefox. Нажатие на кнопку обновления эквивалентно тому, что Cache-Control: no-cache - он говорит о том, что вы хотите самую свежую копию, которая возвращает вас к исходному веб-серверу.
Я бы исследовал отправляемый HTTP-запрос - особенно заголовки HTTP, отправляемые для этого запроса изображения. Вы можете использовать плагин Firefox и / или проверить заголовки в конце сервлета (в HttpServletRequest
объект)