if-none-match with proxy_cache : properly set headers

Maxim Dounin mdounin at mdounin.ru
Thu May 30 11:21:44 UTC 2013


Hello!

On Thu, May 30, 2013 at 06:41:50AM -0400, kapouer wrote:

> Hi,
> i struggled a little to get nginx to cache 304 responses from backend using
> proxy_cache.
> What happens when configuring proxy_cache is that 304 responses are not
> happening because
> nginx strips If-None-Match request headers. It is a workaround to prevent
> the client from getting
> an empty response event if he did not send If-None-Match in the header.
> A better workaround can be :
> 
> proxy_cache_key $http_if_none_match$scheme$proxy_host$request_uri;
> 
> So that the cache sends 304 if the header is properly set, and 200 if it
> isn't.
> Of course one has to kill the first workaround :
> 
> proxy_set_header If-None-Match $http_if_none_match;
> 
> and cache both responses :
> 
> proxy_cache_valid 200 304 1h;
> 
> Comments welcome.

Normally you shouldn't cache 304 responses from a backend, but 
rather cache 200 responses from a backend and let nginx to return 
304 by its own.  This is how it works by default.

Do you have problems with the default aproach?

-- 
Maxim Dounin
http://nginx.org/en/donation.html



More information about the nginx mailing list