Tomcat устанавливает no-cache для файлов JS и CSS

Так расстраивает.:П

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

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

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

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

Изменить: я заметил, что некоторые файлы JS разрешено кэшировать, поскольку Chrome говорит, что они были "извлечены из кэша". Нет CSS-файлов, однако.

3 ответа

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам