Order of HTTP headers change cache behaviour

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

Hello!

On Wed, Feb 22, 2012 at 05:05:32PM +0100, Simone F. wrote:

header(‘Expires: Wed, 11 Jan 1984 05:00:00 GMT’);
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 ?

This probably should be counted as a bug (or at least
misfeature).

Here are what happens: if the Expires header comes first, it
disables caching due to being set to date in the past. The
X-Accel-Expires header which comes later can’t re-enable caching.

On the other hand, if X-Accel-Expires comes first, it will set
cache expiration time. The Expires and Cache-Control headers
later will be just ignored as cache expiration time is already
set.

As a workaround you may want to always sent X-Accel-Expires first,
or explicitly ignore other headers with proxy_ignore_headers.

Maxim D.

On 02/22/2012 05:28 PM, Maxim D. wrote:

This probably should be counted as a bug (or at least misfeature).

Ciao, do you think you will fix/change this behaviour ?
Just to know if and how change my configurations

thanks


Simone

Hello!

On Wed, Feb 22, 2012 at 05:39:22PM +0100, Simone F. wrote:

On 02/22/2012 05:28 PM, Maxim D. wrote:

This probably should be counted as a bug (or at least misfeature).

Ciao, do you think you will fix/change this behaviour ?
Just to know if and how change my configurations

Eventually this will be fixed, but there are no immediate plans
to and it’s relatively low priority.

Maxim D.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs