Cache-Control: max-age=0 and If-Modified-Since combination

From: Ahmed <ahmed_at_baizid.org>
Date: Sat, 26 Jul 2008 01:06:27 +0200

Hello.

I am using Squid 3.0.STABLE8 on Debian Linux.

 # echo "Some useful content.">/var/www/a
 # touch -t200807241400 /var/www/a
 #

 $ http_proxy=localhost:3128 curl \
> -H "Pragma:" \
> -H "Cache-Control: max-age=0" \
> -H "If-Modified-Since: Wed, 23-Jul-08 12:00:00 GMT" \
> http://localhost/a
 Some useful content.
 $ http_proxy=localhost:3128 curl \
> -H "Pragma:" \
> -H "Cache-Control: max-age=0" \
> -H "If-Modified-Since: Wed, 23-Jul-08 12:00:00 GMT" \
> http://localhost/a
 $

The first time, the cache get filled.

The second time, I get a 304 HTTP response.
This answer is not correct.
The document has changed since the date specified.

With the "Cache-Control: max-age=0" header,
Squid is asked to validate its entry.
It contacts the origin server with its own If-Modified-Since header.
The origin server responds 304.
Squid forwards this response to the client.
It should not.
Squid and client If-Modified-Since headers are different.

How about this patch?

 --- client_side_reply.cc 2008-07-25 20:00:02.000000000 +0200
 +++ client_side_reply.cc 2008-07-25 20:05:17.000000000 +0200
 @@ -1,5 +1,5 @@
  /*
 - * $Id: client_side_reply.cc,v 1.154 2008/02/16 17:42:27 rousskov Exp $
 + * $Id$
   *
   * DEBUG: section 88 Client-side Reply Routines
   * AUTHOR: Robert Collins (Originally Duane Wessels in client_side.c)
 @@ -370,7 +370,7 @@
 
      // if client sent IMS
 
 - if (http->request->flags.ims) {
 + if (http->request->flags.ims && http->request->ims >
http->request->lastmod) {
          // forward the 304 from origin
          debugs(88, 3, "handleIMSReply: origin replied 304,
revalidating existing entry and forwarding 304 to client");
          sendClientUpstreamResponse();
Received on Thu Jul 31 2008 - 21:00:24 MDT

This archive was generated by hypermail 2.2.0 : Fri Aug 01 2008 - 12:00:07 MDT