ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Cache Revalidate


  • To: nginx-ru@xxxxxxxxx
  • Subject: Cache Revalidate
  • From: "S.A.N" <nginx-forum@xxxxxxxx>
  • Date: Tue, 26 Nov 2013 21:07:51 -0500
  • Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=helium.jlkhosting.com; s=x; h=Date:Sender:From:Message-ID:Content-Transfer-Encoding:Content-Type:Subject:To; bh=UlJKQFQyPTtXqCFZ1kttuu0ua3dv1sc7VkKpwUokwk8=; b=EFWfB0Gqx/ljqrHSNPu8kuRXG1hvDn64rzckBJyRJyLDIn26wjJRBwcLKCW6Yzyqy08rruCz0RA85S8azNeIzuTGM2uTV9iND9IUxWbTxA6eRU+XdBogC8mDNmPn+X54rp/eX3QnV5sSAVVqIU01LeCPPymVPZXGMmvgQ2jjkjQ=;

Есть досадные мелочи, которые хотелось бы исправить, при включении
fastcgi_cache_revalidate on, параметр HTTP_IF_MODIFIED_SINCE, всегда
отправляется на сервер, даже если кеша нет,  бекенду будет отправлен
параметр с пустым значением.

По стандартам HTTP при отсутствии кеша, клиент не должен отправлять
заголовок If-Modified-Since.
Более правильно если Nginx так же как и браузеры, при отсутствии кеша не
будет передавать в бекенд пустой хедер If-Modified-Since, т.е нет кеша нет
хедера, сейчас приходится в конфиге писать 
fastcgi_param HTTP_IF_MODIFIED_SINCE  $upstream_cache_last_modified
if_not_empty;
чтобы пустой хедер не приходил, как этого требует стандарт.

Настроить subsecond ревалидацию в Nginx по стандартам HTTP тоже невозможно.
Если бекенд отдает заголовок
Cache-Control: max-age=0 и/или Expires: -1
Nginx воспринимает их как указания не кешировать ответ, но по стандартам эти
заголовки не запрещают кешировать они указывают клиенту что ответ сервера
можно кешировать, но он сразу же устаревает и следущий запрос должен пройти
ревалидацию, т.е клиент должен каждый запрос отправлять с хедерем
If-Modified-Since.
Мы нашли способ, как заставить Nginx кешировать такие ответы, отправить ему
хедер
X-Accel-Expires: @$time-1 
Тогда Nginx ведет себя правильно, т.е. так же как браузеры, которым
достаточно отправить Cache-Control: max-age=0
Если, есть более красивое решения вместо X-Accel-Expires: @$time-1, хотелось
бы его узнать. 

Во всем остальном ревалидация работает отлично, ждем с нетерпением
реализацию If-None-Match :)
С наличием ETag, будет все очень классно и правильно!

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

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.