ПРОЕКТЫ 


  АРХИВ 


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]

Re: Bug ? 304 status - Cache-Control



Hello!

On Fri, Jan 03, 2014 at 05:37:53PM -0500, S.A.N wrote:

> > Если вы хотите, чтобы оно работало так, то надо включить в ключ 
> > кеширования заголовок If-None-Match - т.к. от него зависит ответ 
> > бекенда.
> 
> Нет, так делать не надо, потому что на один uri может быть только один
> актуальный ETag, новые значения ETag означают обязательную инвалидацию всех
> предыдущих значений ETag для этого uri, т.е если мы ETag добавим в ключ
> кеша, только один ключ будет актуальным все остальные ключи по этому uri,
> будут лежать как мусор потому что они не могут быть актуальными и их нельзя
> отдавать клиенту, значит и смысла их хранить в кеше нет.

Если от заголовка If-None-Match зависит ответ бекенда, то он 
должен быть в ключе кеширования - либо явно, либо неявно (e.g. 
через запрет кеширования ответов на запросы, где этот заголовок 
присутствует).  Что до сопутствующих накладных расходов - то они 
есть повод задуматься о том, нужна ли вам такая схема работы.

> Проблему с кешированием 304 статуса, мы решили ещё проще ? бекенд теперь
> проверяет значения If-Modified-Since, если оно пустое, ревалидация не
> проводится, страница будет генерироватся полностью со статусом 200, даже
> если хедер If-None-Match не пустой и является актуальным.
> Это корректное условия для ревалидации клиентского кеширования и для
> кеширования Nginx.

Если значение If-Modified-Since не пустое из-за 
fastcgi_cache_revalidate - то заголовок If-None-Match у вас не 
имеет никакого отношения к тому, что, собственно, ревалидируется.  
И если отдать 304 на основании значения If-None-Match, то в кеше 
nginx'а будет оставлен потенциально устаревший ответ.  Т.е.  
If-None-Match нужно просто убрать из рассмотрения при генерации 
ответа на бекенде, иначе корректной работы не добиться.

Возвращаемся всё к тому же: либо добавлять в ключ кеширования, 
либо ответ бекенда не должн зависеть от If-None-Match.  
Собственно, последнее и происходит по умолчанию при использовании 
кеширования - заголовок If-None-Match из запроса к бекенду 
убирается.

-- 
Maxim Dounin
http://nginx.org/

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


 




Copyright © Lexa Software, 1996-2009.