Разница между тремя правилами истечения срока действия .htaccess - PullRequest
10 голосов
/ 18 сентября 2010

В чем разница между следующими тремя правилами .htaccess и тем, когда их использовать, существуют ли какие-либо особые варианты использования, которые предпочитают одно над другим?:

Header set Cache-Control "max-age=290304000"
Header set Expires "Thu, 15 Apr 2020 20:00:00 GMT"
ExpiresDefault "access plus 10 years"

Ответы [ 2 ]

7 голосов
/ 19 сентября 2010

Header - это директива mod_headers , которая позволяет изменять поля заголовка HTTP. В этом случае Header set эффективно устанавливает указанные поля заголовка Cache-Control и Expires , поэтому уже существующее поле заголовка будет перезаписаны.

Первая директива устанавливает поле заголовка Cache-Control со значением max-age=290304000, которое описывает время жизни свежести 290304000 секунд относительно времени отклика.

В отличие от этого, вторая директива устанавливает поле заголовка Expires со значением Thu, 15 Apr 2020 20:00:00 GMT, которое описывает время жизни свежести с абсолютным значением времени.

Оба Cache-Control max-age значение и Expires метку времени истечения можно преобразовать в другой :

4.2.1. Расчет свежести Lifetime

Кэш может рассчитывать время жизни свежести (обозначается как freshness_lifetime) ответа с использованием первого совпадения следующее:

  • ...

  • Если имеется директива о максимальном возрасте ( Раздел 5.2.2.8 ), используйте его значение или

  • Если имеется поле заголовка ответа Expires ( Section 5.3 ), используйте его значение минус значение поля заголовка ответа Дата, или

  • ...

Но если присутствуют оба, Cache-Control 's max-age предпочтительнее, чем Срок действия :

Если ответ содержит поле Cache-Control с максимальным возрастом Директива ( Раздел 5.2.2.8 ), получатель ДОЛЖЕН игнорировать Expires поле. Аналогично, если ответ включает в себя директиву s-maxage ( Раздел 5.2.2.9 ), получатель общего кэша ДОЛЖЕН игнорировать Expires поле. В обоих этих случаях значение в Expires предназначено только для для получателей, которые еще не внедрили поле Cache-Control.

Вместо установки этих полей заголовка элемента управления HTTP-кэшированием вручную, mod_expires ExpiresDefault директива позволяет легко настроить HTTP-кэширование. Время жизни свежести может быть описано либо с абсолютным значением, либо с относительным значением, либо относительно времени отклика (т.е. access / now), либо относительно времени модификации запрошенного файла (т.е. modification). Он использует Cache-Control и Expires .

В этом случае третья директива устанавливает срок действия свежести по умолчанию равным 10 годам с момента ответа.

Я бы использовал mod_expires для управления кэшем HTTP вместо того, чтобы делать это вручную с Header. Это гораздо удобнее, позволяет относительное и абсолютное время обновления и использует Cache-Control и Expires .

3 голосов
/ 19 сентября 2010

Первое правило добавляет запись максимального возраста в Cache-Control.Браузер должен повторно получить документ по истечении указанного здесь времени в секундах.

Второе и третье правила создают заголовки expires.Браузер должен повторно загрузить документ на дату, указанную здесь.И сервер должен выполнить некоторые вычисления.

Обратите внимание, что второе правило принудительно обновляет все браузеры и все ресурсы одновременно, в то время как третье и последнее правило аннулируют кэш браузера в зависимости от времени запроса,Вы увидите разницу, если у вас есть сайт с большим трафиком: вероятно, вы получите впечатляющий пик 15 апреля 2020 года.:)

Как правило: Используйте max-age. Это очень хорошо поддерживается , и у вас нет возможности создать недопустимую дату.Кроме того, он короче.

Дополнительная литература:

10 URL-адресов, достоверно заявленных как истекшие (и, вероятно, мумифицированные) с использованием истечения срока действия "01 jan 0001".

...