Каковы преимущества и недостатки использования ETag против LastModified в качестве средства проверки кэша CDN?

Я читаю эту статью о Azure CDN. Я могу контролировать кеширование с помощью:

  1. ETag
  2. Последнее изменение
  3. Эвристика по умолчанию

Каковы преимущества и недостатки первых двух вариантов? Это имеет значение?

Места, где один может работать против другого, могут быть:

  • Междоменные звонки
  • Частный просмотр
  • 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).

Другие вопросы по тегам