Вопрос

Хорошего дня,

Я использую Кэш - фильтр чтобы отфильтровать определенный путь к моему серверу (который выводит поток изображений в поток ответов).И я настроил его в своем 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 объект)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top