ETags - это всего лишь уникальный непрозрачный тег, вы не можете сравнивать их, кроме равенства, поэтому, если у вас есть 2 ETags для одного и того же ресурса (например, URI), вы не можете определить, какой ресурс является более новым. Для этого вам нужен заголовок Last-Modified.
Даже заголовок Last-Modified является проблематичным, так как он имеет только разрешение до 1 с, а на сильно измененных сайтах (например, в популярных блогах) вполне возможно, что кэш имеет несколько представлений файла с различными ETags и то же самое последнее модифицированное значение. Это позор, который они не считают нужным, чтобы сделать ETags монотонно увеличивающимися, чтобы их можно было сравнить.
ETag используется в условных запросах с заголовком If-None-Match для GET и If-Match для PUT, и в первом случае сервер должен возвращать полное тело, только если ни один из ETag (-ов) не был предоставлен сопоставить текущий ETag для ресурса (он изменился), а во втором случае (для PUT или PATCH), только если он соответствует, поэтому вы работаете над правильной версией.
И ETag, и Last-Modified являются кешем валидатор заголовки. Большая часть преимуществ кеширования связана с концепцией свежесть. Валидаторы позволяют проверить, действительно ли имеющаяся у вас версия, но все равно требуется сделать запрос на сервер. Все, что вы можете сэкономить, это передача полезной нагрузки, и для многих вещей в наши дни это просто не стоит.
Свежесть с другой стороны (истекает директива кэширования заголовка или максимального возраста) позволяет клиенту избежать повторной проверки, если версия, которую они уже имеют, еще свежи (не истек). Это позволяет подключиться к серверу для проверки, и поэтому может сэкономить много времени при загрузке страницы.
Я не согласен. В нашем прокси-кеше было бы очень полезно убрать из рассмотрения представления, основанные на сравнении Etag. – Adrien