Order of HTTP headers change cache behaviour

Simone Fumagalli simone.fumagalli at contactlab.com
Wed Feb 22 16:05:32 UTC 2012


Hello. 

Looking at my log I've noticed that some pages were not cached. After a bit of debugging I've noticed that the order in which the HTTP header are returned from Apache change how NGINX this save the page in the cache 

So a page with this code is *NOT* cached

<?php

header('Content-Type: text/html; charset=UTF-8');
header('Last-Modified: Wed, 22 Feb 2012 14:44:11 GMT');
header('Expires: Wed, 11 Jan 1984 05:00:00 GMT');
header("X-Accel-Expires: 600");
header('Cache-Control: no-cache, must-revalidate, max-age=0');
header('Pragma: no-cache');

Echo "Hello World !";

?>

if I comment/delete the line header('Expires: Wed, 11 Jan 1984 05:00:00 GMT'); the page is cached.

Even if I move header("X-Accel-Expires: 600") before header('Expires: Wed, 11 Jan 1984 05:00:00 GMT'); the page is cached
Same thing happen for the header Cache-Control. If is before X-Accel-Expires the page is not cached if is after it is !

The conf for NGINX is very standard and proxy_cache_valid is not specified.

Is this correct ? Where am I wrong ?

Thanks

--
Simone





More information about the nginx mailing list