Каковы преимущества и недостатки использования ETag против LastModified в качестве средства проверки кэша CDN?
Я читаю эту статью о Azure CDN. Я могу контролировать кеширование с помощью:
- ETag
- Последнее изменение
- Эвристика по умолчанию
Каковы преимущества и недостатки первых двух вариантов? Это имеет значение?
Места, где один может работать против другого, могут быть:
- Междоменные звонки
- Частный просмотр
- IFrames
- Ajax
... где эти данные видны этими методами, а не другими.
3 ответа
Я думаю, это зависит от варианта использования...
например, если у вас есть страница, которая должна показывать, например, время или время, прошедшее от чего-либо, лучшим решением будет последнее изменение (потому что вы запрашиваете время).
но, например, если у вас есть динамически созданный контент, и вы, например, меняете некоторые сценарии, что приводит к изменению даты изменения, но доставленный контент по-прежнему идентичен. Этот сценарий приведет к бесполезной перезагрузке кешей, в то время как eTag сообщит: «Содержимое идентично, поэтому в результате получается тот же eTag».
Подобные ситуации могут возникнуть даже тогда, когда время модификации статических файлов изменилось, но содержимое осталось тем же. Например, когда вы копируете некоторые файлы на новый диск (что приводит к обновлению времени)
Оба допустимы для использования в любом сценарии.eTag
новее, поэтому рекомендуется использовать его вместо
last-modified
Однако решать вам.
Здесь
MS Docs
страница, объясняющая это
eTag
имеет приоритет над
last-modified
в какой системе это интерпретируется:
https://docs.microsoft.com/en-us/azure/cdn/cdn-how-caching-works#cdn-caching
Позвольте мне сделать два реальных предположения:
- вы не можете легко настроить код, который генерирует
ETag
или жеLast-Modified
для вас - вы обслуживаете некоторые статические файлы
Имея это в виду, наиболее очевидным отличием является то, что для файлов вы можете случайно или намеренно изменить дату модификации, тем самым изменив
Last-Modified
заголовок. (Вы могли бы даже, задыхаясь, вернуться к более ранней дате.) В общем случае вы не можете повлиять на
ETag
Так легко. Хорошо или плохо? Зависит от вашего варианта использования. Если код, который генерирует
ETag
приличный, я бы сказал, что он лучше подходит для общего случая использования, известного как just-works-out-of-the-box-dont-touch-the-knobs. Но чтобы понять, прилично ли это, требуется тестирование, особенно тестирование обновлений и понижения версии.
ETag подходит для контента, который изменяется более одного раза в секунду (пример: часто используемый чат), потому что Last-Modified поддерживает только 1-секундную детализацию.
ETag для сжатого ответа должен быть повторно сгенерирован вашим сервером, его нельзя скопировать с несжатого. Но в любом случае это намного меньше загрузки ЦП, чем сжатие.
С CORS у вас есть
Last-Modified
бесплатно, но иметь
eTag
ваш сервер должен поддерживать дополнительный заголовок
Access-Control-Expose-Headers: ETag
(MDN).