В чем разница между заголовками Expires и Cache-Control?

Ответы:

130

Cache-Controlбыл введен в HTTP / 1.1 и предлагает больше возможностей, чем Expires. Их можно использовать для выполнения того же действия, но значением данных Expiresявляется дата HTTP, тогда как Cache-Controlmax-age позволяет вам указать относительное количество времени, чтобы вы могли указать «X часов после запроса страницы».

HTML Cache control - очень похожий вопрос, и он имеет хорошую ссылку на учебник по кэшированию, который должен ответить на большинство ваших вопросов (например, http://www.mnot.net/cache_docs/#EXPIRES ). Подводя итог, Expiresрекомендуется для статических ресурсов, таких как изображения, и Cache-Controlкогда вам нужно больше контроля над тем, как осуществляется кэширование.

Ли
источник
8
Стоит отметить, что контроль над кешем - это то, что будут использовать все браузеры, но полезно указывать оба заголовка на случай, если на пути будут старые прокси.
Начо Колома
3
Используйте сервис redbot.org (также Марк Ноттингем , который написал статью о кэшировании, упомянутую в ответе выше), чтобы проверить правильность использования заголовков кэширования.
Даксим
35
Более того: «Когда присутствуют Cache-Control и Expires, Cache-Control имеет преимущество». - mnot.net/cache_docs/
KFunk
35

Если вы используете CDN (Cloud Delivery Network), я рекомендую использовать Cache-Control с максимальным сроком хранения в секундах. Например, Cache-Control: max-age = 604800. Это предотвращает пики запросов к вашему серверу origin: с «Expires Wed, 30 Oct 20xx 04:37:07 GMT» все браузеры будут запрашивать вас одновременно.

user3241258
источник
22
Apache (и, вероятно, многие серверы) обычно устанавливают дату истечения срока, используя время, в которое файл был запрошен + указанное вами время ожидания. Поскольку эта дата использует секунды, ваш сценарий очень маловероятен и поведение такое же, как cache-control. Поэтому я не понимаю, почему при использовании будут пики запросовExpires:
hilnius
19

Согласно этой статье Google Developers, HTTP Caching :

Заголовок Cache-Control был определен как часть спецификации HTTP / 1.1 и заменяет предыдущие заголовки (например, Expires), используемые для определения политик кэширования ответов. Все современные браузеры поддерживают Cache-Control, поэтому это все, что нам нужно.

Павел
источник
Мало того, что все современные браузеры поддерживают это - они также должны, как это указано в спецификации: «Если ответ включает и заголовок Expires, и директиву max-age, директива max-age переопределяет заголовок Expires, даже если Expires заголовок более строгий "[ w3.org/Protocols/rfc2616/rfc2616-sec14.html]
rosell.dk
8

Cache-Control был определен в HTTP / 1.1, сообщает всем механизмам кэширования от сервера клиенту, могут ли они кэшировать этот объект. Она измеряется в секундах: Cache-Control: max-age=3600.

В Expiresполе заголовка указывается дата / время, после которого ответ считается устаревшим. Истекает значение является HTTP-дата метки времени: Expires: Tue, 18 Jul 2017 16:07:23 GMT.

Если ответ содержит Cache-Controlполе с max-ageдирективой, получатель ДОЛЖЕН игнорировать это Expiresполе.

nodejh
источник
4

Heroku Devcenter имеет отличную статью на эту тему.

Цитируя это,

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

Devi
источник
0

За исключением приватных / публичных опций CC, я не вижу никакой разницы. При использовании Expires типа «доступ плюс 1 год / месяц / неделя / день» он работает точно так же, как и CC.

обкрадывать
источник
Не могли бы вы объяснить отрицательный голос? Я провел обширное тестирование в Chrome, Safari и Firefox. В Cache Control есть несколько опций, которые недоступны при использовании expires, но для всех практических целей оба работают абсолютно одинаково.
Роб
-1

Если вы все еще заинтересованы, я оставляю эту рекомендацию непосредственно от мальчиков Google. https://developers.google.com/speed/docs/insights/LeverageBrowserCaching Они предпочитают срок действия раньше, чем Cache-Control

луч
источник
Вы уверены, что они предпочитают Expires над Cache-Control? Я прочитал переопределение наоборот, по крайней мере для Firefox. developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires
Ecker00
В настоящее время на этой странице упоминается «устарело». Эта страница была написана для версии 4 API PageSpeed ​​Insights, которая устарела и будет закрыта в мае 2019 года. Версия 5 является последней и предоставляет как реальные данные из пользовательского интерфейса Chrome Отчет и лабораторные данные от Lighthouse. "
Йохем Шуленклоппер