Я использую Apache 2.4.25 для предоставления доступа к ряду серверных служб с использованием прокси-сервера. Apache также устанавливает заголовки элементов управления кешем в зависимости от типа mime. Текущая конфигурация кеша выглядит так:
ExpiresActive on
ExpiresDefault "now"
ExpiresByType text/html "now"
ExpiresByType image/gif "access plus 120 minutes"
ExpiresByType image/jpeg "access plus 120 minutes"
ExpiresByType image/png "access plus 120 minutes"
ExpiresByType text/css "access plus 60 minutes"
ExpiresByType text/javascript "access plus 60 minutes"
ExpiresByType application/x-javascript "access plus 60 minutes"
ExpiresByType text/xml "access plus 60 minutes"
ExpiresByType application/javascript "access plus 60 minutes"
ExpiresByType application/x-font-ttf "access plus 30 days"
ExpiresByType application/x-font-woff "access plus 30 days"
ExpiresByType application/x-font-eot "access plus 30 days"
ExpiresByType application/x-font-svg "access plus 30 days"
Однако одна из внутренних служб также устанавливает заголовок max-age для управления кешем. Это приводит к тому, что заголовок ответа содержит две настройки максимального возраста.
Повторяющиеся значения max-agent, как показано в Chrome
Как браузер реагирует на два параметра максимального возраста с разными значениями? Кроме того, можно ли проверить существующий заголовок управления кешем перед добавлением значения по умолчанию?
Используйте заголовок «набор» вместо заголовка «добавить», если вы не хотите случайных дубликатов из-за того, что бэкэнд отправляет тот же заголовок.
Согласно последним документам mod_expires: http://httpd.apache.org/docs/current/mod/mod_expires.html
Когда заголовок Expires уже является частью ответа, сгенерированного сервером [...], этот модуль не изменяет и не добавляет заголовок Expires или Cache-Control.
Таким образом, один из вариантов - заставить ваш бэкэнд установить заголовок Expires в дополнение к уже установленному заголовку Cache-Control. Например, в PHP:
$seconds = 60;
header("Expires: ". gmdate('D, d M Y H:i:s', time() + $seconds). ' GMT');
header("Cache-Control: max-age=". $seconds);
Когда заголовок Expires уже является частью ответа, сгенерированного сервером [...], этот модуль не изменяет и не добавляет заголовок Expires или Cache-Control.
Это неправда, Apache все еще добавляет дополнительные Cache-Control
и Expires
заголовки.