Conditional GETs

Ricardo Newbery ric at digitalmarbles.com
Sun Jul 29 21:05:01 CEST 2007


On Jul 29, 2007, at 3:52 AM, Dag-Erling Smørgrav wrote:

> Ricardo Newbery <ric at digitalmarbles.com> writes:
>> What happens when a client sends a conditional request (either INM or
>> IMS) and the content is not available in the Varnish cache?  I assume
>> that Varnish will just relay the original conditional request through
>> to the backend.
>
> No, it will strip the conditional header before requesting the page  
> from
> the backend.


Okay, I think I understand.  So with Varnish in front, using the  
default VCL, there is no set of circumstances that will ever result  
in a conditional request to the backend.  Correct?

But I can still change this behavior with a custom VCL.  Correct?

Would the following work:


# perpetually refresh my cache
vcl_timeout {
         fetch;
}


# hold on to cache for at least a day
vcl_fetch {
         if (obj.ttl < 86400s) {
                 set obj.ttl = 86400s;
         }


# if not available in cache, pass client's IMS to backend
# and pass response back to client without caching
vcl_miss {
         if (req.http.If-Modified-Since) {
                 pass;
         }
}


If I wanted to selectively apply the first two above, could I just  
leverage a few custom headers like so?


# selectively force a perpetually refreshing cache  (is "resp"  
available here?)
vcl_timeout {
         if (resp.http.X-Cache-Refetch) {
                 fetch;
         }
}


# selectively apply a local ttl without messing up downstream proxies
vcl_fetch {
         if (resp.http.X-Cache-TTL) {
                 set obj.ttl = resp.http.X-Cache-TTL;
         }
}





More information about the varnish-misc mailing list