Re: Bug – 304 status - Cache-Control

S.A.N nginx-forum at nginx.us
Fri Jan 3 21:04:03 UTC 2014


> поддержка 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 все намного
красивей и проще, если будет интересно могу рассказать подробней.

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,245951,245988#msg-245988



Подробная информация о списке рассылки nginx-ru