Last-Modified
Применение
Заголовок Last-Modified выступает слабым валидатором для условных запросов. Когда клиент кэширует ответ, содержащий Last-Modified, он сохраняет отметку времени и отправляет эту дату обратно в запросном заголовке If-Modified-Since при последующих запросах. Сервер сравнивает сохранённую дату с текущим временем изменения ресурса. Если ресурс не изменился, сервер возвращает 304 Not Modified без тела. Если ресурс изменился, сервер отправляет полный обновлённый ответ.
Заголовок If-Unmodified-Since использует ту же отметку времени для проверки предусловий у небезопасных методов, таких как PUT и DELETE, и возвращает 412 Precondition Failed, если ресурс был изменён после указанной даты.
Дата в Last-Modified менее точна, чем ETag. Отметки времени имеют гранулярность в одну секунду, поэтому изменения в пределах одной секунды невидимы для валидации по дате. Заголовок ETag предоставляет более строгий валидатор, привязанный к конкретному содержимому. Когда в ответе присутствуют и Last-Modified, и ETag, при повторной валидации приоритет имеет ETag.
Значение даты следует формату HTTP-date: название дня, двузначное число дня, сокращённое название месяца, четырёхзначный год, время в часах, минутах и секундах, затем GMT. Формат: Weekday, DD Mon YYYY HH:MM:SS GMT.
Last-Modified: Fri, 04 Sep 1998 19:15:56 GMT
Примечание
ETag точнее, чем Last-Modified. ETag обнаруживает любые изменения, включая происходящие за доли секунды, тогда как у Last-Modified гранулярность в одну секунду. Last-Modified подвержен расхождению часов между серверами, а ETag, основанный на хешировании содержимого, переносим между экземплярами за балансировщиком нагрузки. Используйте оба заголовка вместе для максимальной совместимости, поскольку If-None-Match (ETag) имеет приоритет над If-Modified-Since, когда присутствуют оба.
Примечание
Инфраструктура сканирования Google поддерживает Last-Modified и If-Modified-Since в соответствии со стандартом HTTP Caching. Дата в Last-Modified должна соответствовать формату HTTP-date, иначе возможны проблемы с разбором. Установка поля max-age в заголовке ответа Cache-Control равным ожидаемому числу секунд, в течение которых содержимое остаётся неизменным, помогает поисковым роботам определить, когда пересканировать URL. Например, Cache-Control: max-age=94043.
Пример
Ответ с датой изменения ресурса. Клиент сохраняет эту отметку времени для будущих условных запросов.
Last-Modified: Wed, 01 Jun 2022 08:00:00 GMT
Полный цикл условного запроса. Сервер отправляет Last-Modified в первоначальном ответе. При следующем запросе клиент возвращает эту отметку времени в If-Modified-Since. Сервер возвращает 304, если ресурс не изменился.
HTTP/1.1 200 OK
Last-Modified: Wed, 01 Jun 2022 08:00:00 GMT
Cache-Control: max-age=86400
Content-Type: text/html
Последующий запрос:
GET /page HTTP/1.1
If-Modified-Since: Wed, 01 Jun 2022 08:00:00 GMT
Ответ сервера, когда изменений нет:
HTTP/1.1 304 Not Modified
Last-Modified: Wed, 01 Jun 2022 08:00:00 GMT
Cache-Control: max-age=86400
Ответ, в котором Last-Modified сочетается с ETag. ETag даёт строгий валидатор, а дата изменения служит запасным вариантом для клиентов, поддерживающих только валидацию по дате.
Last-Modified: Fri, 22 Nov 2024 14:30:00 GMT
ETag: "a1b2c3d4"
Cache-Control: max-age=3600
Примечание
По вопросам SEO и кэширования обращайтесь к бывшим SEO-консультантам Google — Search Brothers.