> поддержка E-Tag в Nginx была всегда, как минимум в виде трансляции
> заголовка с бэк-енда. С версии 1.3.3 Nginx научился ее
> включать/выключать
> http://nginx.org/en/docs/http/ngx_http_core_module.html#etag
>
> Не забывайте, что еще есть разница между weak/strong E-Tag,
> согласно RFC
> (http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.3.3)
> Nginx откусывает E-Tag при некоторых условиях, например, при
> включенном gzip,
> когда body (и следовательно, E-Tag) передается модифицированным.
>
> С другой стороны, Last-Modified не изменяется gzip-сжатием
> и вы можете использовать его для реализации Conditional-Get.
Да, я знаю, но речь шла про отсутствия возможности ревалидации Nginx кеша по If-None-Match (ETag)
Последняя версия Nginx 1.5.8, деректива fastcgi_cache_revalidate on, включает ревалидацию только по If-Modified-Since (Last-Modified), в будущих версиях обещают добавить возможность ревалидации по If-None-Match (ETag)
Насчет weak ETag, наш бекенд отдает уже сжатый ответ, в конфиге Nginx есть директива gunzip on, которая отдает не сжатый ответ для клиентов которые не поддерживают сжатые ответы. Так же этот модуль удаляет хедер ETag, пробовали использовать weak ETag (например - W/"…."), результат тот же, Nginx удаляет ETag, возможно сейчас что-то поменялось, надо будет проверить на новых версиях Nginx.
Насчет ревалидации кеша по If-Modified-Since (Last-Modified), это не просто если на сайте миллионы страниц, потому что придется хранить для каждой страницы последнюю дату модификации чтобы сравнивать с датой, которая пришла от клиент в хедере If-Modified-Since, проблема даже не в кол-ве записей Memcache это выдержит, проблема в том что эти записи надо как-то обновлять, т.е после операций UPDATE, DELETE, INSERT в СУБД, надо обновить все Last-Modified страниц которые были изменены этими запросами.
Это означает, что ещё надо хранить связи между страницами и рекурсивно обновлять эти даты для всех страниц, так как Memcache не подтерживает множественных апдейтов, на каждое изменения надо будет отдельный запрос в Memcache, в общем выходит очень не эффективная работа, с ETag все намного красивей и проще, если будет интересно могу рассказать подробней.