Tomcat не устанавливает кэш для файлов JS и CSS

#caching #tomcat #no-cache

#кэширование #tomcat #нет кэша

Вопрос:

Так расстраивает. 😛

Действительно хотелось бы, чтобы они кэшировались в браузерах пользователей, но он устанавливает это.

Управление кэшем: нет хранилища, нет кэша, необходимо повторно проверять, постпроверка = 0, предварительная проверка=0

Как мне остановить это?

Я попытался посмотреть в наших настройках все, что связано с кэшированием. Используются все значения по умолчанию, что, согласно документации, означает, что это разрешено. Отличаются ли статические файлы, такие как JS и CSS?

Редактировать: Я заметил, что некоторым файлам JS разрешено кэшировать, поскольку Chrome сообщает, что они были «извлечены из кэша». Однако файлы CSS отсутствуют.

Ответ №1:

Вы могли бы написать свой собственный фильтр кэша и настроить его в вашем web xml.

Здесь вы найдете простой, но отличный пример того, как это реализовать.

в вашем web.xml вы объявляете свой фильтр:

 <filter>
    <description>Set HTTP headers for a mapping.</description>
    <filter-name>CacheFilter</filter-name>
    <filter-class>your.package.CacheFilter</filter-class>
    <init-param>
        <description>Adds an expires header to the response</description>
        <param-name>header</param-name>
        <param-value>Expires: Thu, 26 Apr 2012 20:00:00 GMT</param-value>
    </init-param>
</filter>
  

затем сопоставьте это (примените к ответам):

 <filter-mapping>
    <filter-name>CacheFilter</filter-name>
    <url-pattern>*.js</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter-mapping>
    <filter-name>CacheFilter</filter-name>
    <url-pattern>*.css</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>
  

Возможно, вы также захотите использовать фильтр сжатия (таким же образом), чтобы уменьшить нагрузку на данные, отправляемые с сервера. Эта реализация фильтра gzip работает у меня уже много лет (вместе с фильтром кэша), и с ними никогда не возникало никаких проблем.

Комментарии:

1. Tomcat поставляется с фильтром сжатия; Я бы рекомендовал использовать его. И фильтр кэша? Вы беспокоитесь о безопасности потоков? Я бы.

Ответ №2:

Или вы можете попросить сервлет установить срок действия кэша и заголовки последнего изменения в ответе.

Я бы также рекомендовал GZIP сжимать JavaScript и CSS. Tomcat поставляется с фильтром сжатия в каталоге /examples, который вы можете подключить для получения соответствующих URL-адресов.

Вы должны объединить и минимизировать свои JavaScript и CSS для повышения производительности.

Все это рекомендации плагина YSlow для Firefox. Вы можете увидеть, насколько эффективны эти меры, используя подключаемый модуль Firebug.

Комментарии:

1. Мы уже архивируем файлы CSS и Javascript. Мы также рассматриваем возможность сокращения нашего JS.

2. Оказывается, это было самое очевидное место, как описано здесь. 😀 Не знаю, как я мог это пропустить, хе-хе. Мы сами устанавливали параметры, которые я хотел отключить вручную.

Ответ №3:

 <FilesMatch ".(js|css)$">
    ExpiresDefault "now plus 1 week"
</Files>
  

в вашей конфигурации Apache должно сработать, если оно находится где-то после содержимого конфигурации Tomcat.

Комментарии:

1. Мы не используем Apache или, по крайней мере, у меня нет доступа к do на производственных компьютерах.