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
вторник, 7 января 2014 г. пользователь Gena Makhomed писал:
On 07.01.2014 12:59, Илья Шипицин wrote:
On 04.01.2014 3:07, S.A.N wrote:
Бекенд, не знает и не должен знать, какой тип кеша
ему нужно ревалидировать, клиентский или кеш Nginx,
по хорошему в первом и во втором случаи, механизм
должен быть полностью одинаковым.
каким же образом тогда nginx может узнать, какие ответы от
backend`а ему следует сохранять в своем кеше, а какие нет?
каким образом - в треде это явно предлагалось, путем
1) кеширования контента, у которого выставлен max-age=0 (или остутствует)
каким образом это поможет бороться с кешированием пустых 304 ответов,
которые приходят с backend`а с "Cache-Control: public, max-age=1" ?
кеширование 304 может быть только с пустым телом. такова природа этого ответа.
2) прокидывания клиентских if-none-match/if-not-modified-since до бекенда
только это как раз будет способ создать проблему, а не решить ее.
backend ответит 304 статусом и пустая страница попадет в кеш nginx.
если бекенд ответит 304, то nginx тоже ответит 304. да, в этом случае тело ответа не нужно.
если бекенд понял, что контент поменялся, то ответ будет 200 и будет тело.
соответственно, когда тело нужно, оно есть. и наоборот. в чем проблема ?
я вижу проблему в сильном усложнении логики. без бутылки будет не разобраться. прежде чем выпускать таких демонов, надо сто раз подумать.
On 06.01.2014 10:35, S.A.N wrote:
Отключить Nginx кеширования тоже не можем потому что на других uri мы
используем Nginx кеширования, например uri
/news/list
Отдает контент с заголовками
Cache-Control: public, max-age=1
Эта страница должна попадать в кеш Nginx.
Имино с этой страницей и будут проблемы,
если в папке кеша Nginx удалится файл кеша,
и прийдет запрос от браузера с актуальным заголовками
If-Modified-Since и If-None-Match, на этот запрос бекенд ответит 304
статусом и вернет заговок Cache-Control: public, max-age=1,
в результате чего 304 ответ попадет в кеш Nginx.
304 ответ попадет в кеш nginx потому что Вы сами же включили
кеш nginx и сами же разрешили nginx кешировать этот ответ,
вернув заголовок Cache-Control: public, max-age=1
который управляет одновеменно и клиентским кешем и кешем nginx.
Добавьте к 304 ответам backend`а еще один заголовок X-Accel-Expires: 0
который будет запрещать nginx кешировать такие ответы и будет вам счастье.
Ваш backend обязан знать о том, что есть два различных кеша,
если Вы хотите управлять ими по-разному. Иначе не получится.
--
Best regards,
Gena
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru
|