Назад | Перейти на главную страницу

Какую стратегию мне следует использовать для HTTP-сервера Apache, чтобы кеш вновь развернутых файлов стал недействительным?

Очень распространенное решение - сделать следующее:

<ifModule mod_headers.c>
    FileETag None
    Header unset ETag
    Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires "Thu, 01 Jan 1970 00:00:01 GMT"
</ifModule>

Я действительно хочу, чтобы они были кэшированы, но я также хочу, чтобы они были признаны недействительными при повторном развертывании. Я думаю, что мне нужно повторно включить ETag, а затем, когда мы повторно загружаем файлы, «прикоснитесь» к ним, чтобы все метки времени считали текущее время, и они получили другой ETag.

Я несколько следую тому, что читаю из этого ответа:

https://stackoverflow.com/questions/499966/etag-vs-header-expires

Это звучит правильно?

Etag - хорошая идея, но ваш заголовок expires мешает ей. Почему бы просто не установить для заголовка expires разумное значение? Слишком много людей устанавливают безумные даты истечения срока действия, из-за которых для правильно настроенного клиента клиент даже не отправляет запрос на сервер.

Во-первых, установите для срока действия что-то разумное, например request date + 1 week (независимо от вашего ожидаемого цикла выпуска). Затем клиенты, которые правильно следуют спецификациям для заголовков с истекшим сроком действия, вернутся через это время. Это намного проще и надежнее, чем пытаться кешировать все при каждом развертывании.

РЕДАКТИРОВАТЬ: Я предположил, что приведенный вами пример был вашей конфигурацией. Я не хочу, чтобы это прозвучало резко, но я вижу, как люди все время делают глупости с кешированием.