[Varnish] #247: Varnish sends 304 header for ESI pages although some of the included objects might have changed

Varnish varnish-bugs at projects.linpro.no
Wed Jun 11 14:46:21 CEST 2008


#247: Varnish sends 304 header for ESI pages although some of the included
objects might have changed
----------------------+-----------------------------------------------------
 Reporter:  peter     |       Owner:  phk  
     Type:  defect    |      Status:  new  
 Priority:  normal    |   Milestone:       
Component:  varnishd  |     Version:  trunk
 Severity:  normal    |    Keywords:       
----------------------+-----------------------------------------------------
 I've replicated the ESI example of the Wiki using PHP. My VCL (which is
 based on the example from the man page) looks like follows:
 {{{
 backend default {
   .host = "dev";
   .port = "http";
 }

 sub vcl_recv {
   set req.http.X-Forwarded-For = client.ip;
   set req.http.Host = "dev";
   lookup;
 }

 sub vcl_pipe {
   pipe;
 }

 sub vcl_pass {
   pass;
 }

 sub vcl_hash {
   set req.hash += req.url;
   set req.hash += req.http.host;
   hash;
 }

 sub vcl_hit {
   deliver;
 }

 sub vcl_miss {
   fetch;
 }

 sub vcl_fetch {
   if (!obj.valid) {
       error;
   }

   if (req.url == "/test.html") {
       esi;  /* Do ESI processing */
       set obj.ttl = 24 h;
   } elseif (req.url == "/date.php") {
       set obj.ttl = 1m;
   }

   insert;
 }

 sub vcl_deliver {
   deliver;
 }

 sub vcl_timeout {
   discard;
 }

 sub vcl_discard {
   discard;
 }
 }}}
 The PHP script (date.php) is responsible for printing the current date.

 Everything seems to work fine. The date.php file output is cached for a
 minute and if I keep refreshing my browser I get to see a new version
 after a minute. The ESI include inside the test.html file also seems to
 work fine because the date is displayed inline if I request the test.html
 file.

 However, when I keep refreshing the test.html file the browser receives a
 304 Unmodified header and after that doesn't seem to do a new request
 anymore. Even after a minute if I do a simple refresh in the browser I
 still get to see the old date. Only if I force a refresh using SHIFT-
 REFRESH I get to see the new date.

 So although the ESI include works fine, and the inline content is being
 updated, it seems that the headers that get send by Varnish are not
 entirely correct.

 But this might also be my fault in some way?

-- 
Ticket URL: <http://varnish.projects.linpro.no/ticket/247>
Varnish <http://varnish.projects.linpro.no/>
The Varnish HTTP Accelerator


More information about the varnish-bugs mailing list