Re: Bug – 304 status - Cache-Control

Илья Шипицин chipitsine at gmail.com
Tue Jan 7 13:41:19 UTC 2014


вторник, 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 at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20140107/7caab99f/attachment.html>


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