В чем может быть разница между if-modified-Since и if-none-match? У меня такое ощущение, что if-none-match используется для файлов, тогда как if-modified-Since используется для страниц?
89
Что касается различий между Last-Modified/If-Modified-Since
и ETag/If-None-Match
:
Оба могут использоваться как взаимозаменяемые. Однако в зависимости от типа ресурса и того, как он генерируется на сервере, может быть легче ответить на тот или иной вопрос («было ли это изменено с тех пор ...?» / «Соответствует ли он этому ETag?») .
Примеры:
mtime
качестве Last-Modified
даты является самым простым решением.ETag
будет намного проще использовать, например, md5-хэш содержимого страницы . Смотрите эти ссылки для более подробной информации по теме:
If-Modified-Since
сравнивается сLast-Modified
тогдаIf-None-Match
как сравнивается сETag
. ОбаModified-Since
иETag
могут использоваться для идентификации конкретного варианта ресурса.Но сравнение
If-Modified-Since
toLast-Modified
дает вам информацию о том, является ли кешированный вариант более старым или новым, тогда как сравнениеIf-None-Match
toETag
просто дает вам информацию, идентичны ли оба варианта или нет. Кроме того, большинствоETag
генераторов включают информацию об индексном дескрипторе системы, поэтому перемещение файла на другой диск также может изменить егоETag
.источник
Значение отметки времени, используемое в Last-Modified / If-Modified-Since, имеет ограниченную точность - одну секунду, и этого просто недостаточно для быстрого изменения контента, как, например, приложение веб-чата, где в любую секунду может быть опубликовано более одного сообщения. . ETag / If-None-Match может помочь решить эту проблему.
источник
Как указано в лучших практиках Google:
https://developers.google.com/speed/docs/best-practices/caching
источник
Last-Modified
withETag
(или со стороны пользователя-агентаIf-Modified-Since
withIf-None-Match
) не упоминается. Точно так же спецификация W3 вас не ограничивает. Он говорит, что не использоватьIf-Modified-Since
сIf-Match
, но я предполагаю, что это потому, что набор документов, которые имеют обновленные даты, но такое же содержимое, как определено ETag, должен быть довольно небольшим.If-Modified-Since использует дату, а If-None-Match использует ETag . Оба они могут использоваться для «страниц» (например, HTML) и других файлов.
источник
Если сервер не указал как слабый, ETag считается сильным валидатором и, таким образом, может использоваться для удовлетворения условного ранжированного запроса. Однако большинство автоматически сгенерированных тегов ETag вызывают трудности в ситуациях фермы серверов, поскольку они часто используют информацию об индексах и / или уникальный постоянный счетчик. На практике я обнаружил, что заголовка Last Modified достаточно для довольно статического содержимого, например, для обслуживания защищенного статического содержимого, поскольку время записи файла является достаточно хорошим валидатором.
ETag, безусловно, самый гибкий. Соответствующие клиенты должны отправлять ETag в условном запросе, тогда как они ДОЛЖНЫ отправлять оба, если они доступны.
источник
Заголовок If-Modified-Since используется для указания времени, когда браузер последний раз получил запрошенный ресурс. Заголовок If-None-Match используется для указания тега объекта, выданного сервером с запрошенным ресурсом при его последнем получении.
Двумя описанными способами эти заголовки используются для поддержки кэширования контента в браузере, и они позволяют серверу инструктировать браузер использовать кэшированную копию ресурса, вместо того, чтобы отвечать с полным содержимым ресурса, если это так. не обязательно.
источник