яка різниця між заголовками Expires і Cache-Control?


Відповіді:


130

Cache-Controlбула представлена ​​в HTTP / 1.1 і пропонує більше варіантів, ніж Expires. Вони можуть використовуватися для того ж, але значення даних Expires- це дата HTTP, тоді як Cache-Controlмаксимальний вік дозволяє вказати відносну кількість часу, щоб ви могли вказати "X годин після запиту на сторінку".

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


8
Варто зауважити, що кеш-контроль - це те, чим користуватимуться всі браузери, але корисно вказати обидва заголовки на випадок, якщо на шляху є старі проксі.
Nacho Coloma

3
Використовуйте сервіс redbot.org (також Марк Ноттінгем , який написав статтю кешування, на яку посилається у відповіді вище), щоб перевірити правильність використання заголовків кешування.
daxim

35
Крім того: "Коли є кеш-контроль і закінчується, кеш-контроль має перевагу". - mnot.net/cache_docs/
KFunk

35

Якщо ви використовуєте CDN (Cloud Cloud Network), рекомендую використовувати кеш-контроль з максимальним віковим часом у секундах. Наприклад кеш-контроль: max-age = 604800. Це запобігає максимальній кількості запитів на ваш початковий сервер: "Термін дії закінчується, 30 жовтня 20 хв.


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

19

Відповідно до цієї статті розробників Google, керування HTTP :

Заголовок кеша-керування був визначений як частина специфікації HTTP / 1.1 і замінює попередні заголовки (наприклад, Expires), що використовуються для визначення політики кешування відповідей. Усі сучасні браузери підтримують кеш-контроль, отже, це все, що нам буде потрібно.


Не тільки всі сучасні браузери підтримують це - вони також повинні, як це є у специфікації: "Якщо відповідь включає як заголовок Expires, так і директиву max-age, директива max-age замінює заголовок Expires, навіть якщо Expires заголовок є більш обмежуючим "[ w3.org/Protocols/rfc2616/rfc2616-sec14.html]
rosell.dk

8

Кеш-контроль, визначений у HTTP / 1.1, повідомляє всі механізми кешування від сервера до клієнта, чи можуть вони кешувати цей об’єкт. Вона вимірюється в секундах: Cache-Control: max-age=3600.

Поле Expiresзаголовка дає дату / час, після яких відповідь вважається несвіжим. Завершується значення є HTTP-дата мітки часу: Expires: Tue, 18 Jul 2017 16:07:23 GMT.

Якщо відповідь включає Cache-Controlполе з max-ageдирективою, одержувач ОБОВ'ЯЗКОВО ігнорує Expiresполе.


4

Heroku devcenter має чудову статтю на цю тему.

Цитуючи це,

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


0

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


Чи хотіли б ви пояснити сутічку? Я провів обширні тестування в Chrome, Safari та Firefox. Кеш керування має деякі параметри, які недоступні при використанні терміну дії, але для всіх практичних цілей обидва працюють точно однаково.
Роб-

-1

Якщо ви все ще зацікавлені, я залишаю цю рекомендацію безпосередньо від хлопців Google. https://developers.google.com/speed/docs/insights/LeverageBrowserCaching Вони віддають перевагу Закінчується раніше, ніж кеш-контроль


Ви впевнені, що віддають перевагу Закінчується через кеш-контроль? Я читаю, що переоцінка - це навпаки, принаймні для Firefox. developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires
Ecker00

Наразі ця сторінка згадує "Застарене. Ця сторінка була написана для версії 4 API PageSpeed ​​Insights, яка застаріла і буде закрита у травні 2019 року. Версія 5 є останньою та надає як реальні дані з досвіду користувачів Chrome. Звіт і дані лабораторії від маяка. "
Йохем Шуленклоппер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.