ETag похож на заголовок Last-Modified. Это механизм определения изменений клиентом.
Возможно, ETag, который ПРОСТО СЛУЧАЕТСЯ быть датой последнего изменения (т.е. того же текста), отвечает всем критериям, необходимым для ETag. Это просто должно быть уникальное значение, представляющее состояние ресурса. Не уникален во всем домене ресурсов, просто внутри ресурса.
Технически ETag имеет «бесконечное» разрешение по сравнению с заголовком Last-Modified. Last-Modified изменяется только с частотой 1 секунда, тогда как ETag может быть меньше секунды.
Вы можете реализовать ETag и Last-Modified, или просто один или другой (или ни один, конечно). Если вам последнего изменения недостаточно, рассмотрите ETag.
Имейте в виду, я бы не стал устанавливать ETag для "каждого" ресурса. По сути, я бы не стал устанавливать это для чего-либо, что не ожидает кэширования (особенно динамического контента). В этом нет никакого смысла, просто потраченная впустую работа.
Редактировать: я вижу ваши правки и уточняю.
MD5 в порядке. Единственным недостатком является постоянное вычисление MD5. Запуск MD5 на, скажем, PDF-файле размером 200 КБ стоит дорого. Запуск MD5 на ресурсе, который не ожидает кэширования, просто расточителен (то есть динамическое содержимое).
Хитрость в том, что какой бы механизм вы ни использовали, он должен быть таким же дешевым, как и Last-Modified. Last-Modified, опять же, обычно является свойством ресурса и, как правило, очень дешев для доступа.
ETag должны быть такими же дешевыми. Если вы используете MD5, и вы можете кэшировать / сохранять связь между ресурсом и хешем MD5, то это прекрасное решение. Однако пересчет MD5 каждый раз, когда необходим ETag, в основном противоречит идее использования ETag для повышения общей производительности сервера.