Re: Bug – 304 status - Cache-Control

Gena Makhomed gmm at csdoc.com
Tue Jan 7 14:35:44 UTC 2014


On 07.01.2014 15:41, Илья Шипицин wrote:

>>> 2) прокидывания клиентских if-none-match/if-not-modified-__since
>>> до бекенда

>> только это как раз будет способ создать проблему, а не решить ее.
>> backend ответит 304 статусом и пустая страница попадет в кеш nginx.

> если бекенд ответит 304, то nginx тоже ответит 304. да, в этом случае
> тело ответа не нужно.
>
> если бекенд понял, что контент поменялся, то ответ будет 200 и будет тело.
>
> соответственно, когда тело нужно, оно есть. и наоборот. в чем проблема ?

fastcgi_cache_key "$host$uri$is_args$args";

от backend`а приходит 304 ответ, который говорит nginx`у,
чтобы тот положил ответ в свой кеш на 1 секунду, что nginx и делает.

и все последующие GET запросы от других клиентов по этому cache_key
будут получать пустую страницу, от закешированного ранее 304 ответа.

ибо "Cache-Control: public, max-age=1" - backend части последующих
запросов от клиентов просто не увидит, их будет обрабатывать nginx.

поэтому надо или включать $http_if_modified_since и $http_if_none_match
в *_cache_key (но это плохо) или запретить nginx кешировать 304 ответы.

соответственно, если хочется и кеш на клиенте включить и кеш nginx
выключить - то управлять этими двумя разными кешами надо backend`у.

> 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.

-- 
Best regards,
  Gena



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