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
|