ETag похож на заголовок Last-Modified. Это механизм определения изменений со стороны клиента.
ETag должен быть уникальным значением, представляющим состояние и конкретный формат ресурса (ресурс может иметь несколько форматов, каждый из которых требует своего собственного ETag). Не уникальна для всей области ресурсов, а просто внутри ресурса.
Теперь технически ETag имеет бесконечное разрешение по сравнению с заголовком Last-Modified. Last-Modified изменяется только с шагом в 1 секунду, тогда как ETag может быть меньше секунды.
Вы можете реализовать как ETag, так и Last-Modified, или просто одно или другое (или, конечно, ни одного). Если вам недостаточно Last-Modified, рассмотрите вариант ETag.
Обратите внимание, я бы не стал устанавливать ETag для каждого ресурса. По сути, я бы не стал устанавливать его для чего-либо, что не предполагает кэширования (особенно динамического содержимого). В этом случае нет никакого смысла, просто потраченная впустую работа.
Изменить: я вижу ваше редактирование и уточняю.
MD5 в порядке. Единственный недостаток - постоянный расчет MD5. Использование MD5, скажем, для файла PDF размером 200 КБ обходится дорого. Запуск MD5 на ресурсе, который не ожидает кэширования, просто расточителен (т. Е. Динамический контент).
Хитрость заключается в том, что какой бы механизм вы ни использовали, он должен быть таким же дешевым, как и Last-Modified. Last-Modified, опять же, как правило, является свойством ресурса и обычно очень дешево для доступа.
ETags также должны быть дешевыми. Если вы используете MD5 и можете кэшировать / сохранять связь между ресурсом и хешем MD5, то это прекрасное решение. Однако пересчет MD5 каждый раз, когда требуется ETag, в основном противоречит идее использования ETags для повышения общей производительности сервера.
person
Will Hartung
schedule
18.02.2010