--MimeMultipartBoundary
Content-Type: text/plain; charset=us-ascii
----- Forwarded message from "David W. Hankins" <dhankins@mercenary.net> -----
  Return-Path: dhankins@hcf.mercenary.net
  Received: from nlanr.net (oceana-ether.nlanr.net [192.172.226.25]) by caida.org (8.8.8/8.7.3) with ESMTP id TAA06150 for <kc@ipn.caida.org>; Mon, 22 Jun 1998 19:12:00 -0700 (PDT)
  Received: from hcf.mercenary.net (mail@hcf.mercenary.net [209.122.24.43])
          by nlanr.net (8.8.6/8.8.6) with ESMTP id RAA15821
          for <kc@nlanr.net>; Mon, 22 Jun 1998 17:23:50 -0700 (PDT)
  Received: (from dhankins@localhost)
          by hcf.mercenary.net (8.8.7/8.8.7) id UAA22394;
          Mon, 22 Jun 1998 20:23:47 -0400
  Message-ID: <19980622202346.E21885@mercenary.net>
  Date: Mon, 22 Jun 1998 20:23:46 -0400
  From: "David W. Hankins" <dhankins@mercenary.net>
  To: Kim Claffy <kc@nlanr.net>
  Subject: squid 1.1.21 patch
  Mime-Version: 1.0
  Content-Type: text/plain; charset=us-ascii
  X-Mailer: Mutt 0.91.1i
I highly recommend the following patch.
I am conversable if the comment is unclear.
diff -u ../../squid-1.1.21/src/refresh.c ./refresh.c
--- ../../squid-1.1.21/src/refresh.c	Fri Dec 20 18:23:01 1996
+++ ./refresh.c	Mon Jun 22 20:16:45 1998
@@ -163,13 +163,45 @@
         debug(22, 3, "refreshCheck: YES: age > max\n");
         return 1;
     }
-    if (entry->timestamp <= entry->lastmod) {
+    /* Agree, this is fucked up.  Fault it out of the cache. */
+    if (entry->timestamp < entry->lastmod) {
         if (request->protocol != PROTO_HTTP) {
             debug(22, 3, "refreshCheck: NO: non-HTTP request\n");
             return 0;
         }
         debug(22, 3, "refreshCheck: YES: lastvalid <= lastmod\n");
         return 1;
+    }
+    /* Earlier, the above if statment was a <=.  This sucked because there
+     * are a set of really stupid httpds (Microsoft-IIS/4.0) which neither
+     * set a 'Last-Modified' header nor do they understand If-Modified-Since.
+     * The resulit is that squid sets the last-modified to squid_curtime,
+     * which is what timestamp is set to.  The idea is that we'd refresh a
+     * few times, learn a new timestamp but keep the old last-mod.  The
+     * big problem here is that we still *get the object* because this server,
+     * not intelligent enough to provide last-modified, is not intelligent
+     * enough to understand if-modified-since.  So the timestamp is never
+     * updated, the object uses disk space and is *never actually cached.*.
+     * This is a perfectly cacheable object...if the remote server is old,
+     * we should use the min/max rules instead of just not caching.
+     *
+     * The alternative to the below is to modify the actual refreshing code
+     * so that we detect when the object is exactly identical to the previous
+     * object; update the timestamp and leave the last-modified stamp.  Then
+     * we fall back into the designed exponential-backoff that is the pct.
+     *
+     * BUT...we are still not caching the object by retrieving it.  We are
+     * still using network resources.
+     *
+     * So...it is better to use the == here to signal that the remote server
+     * is incapable of participating with us in our grand scheme to provide
+     * exponential backoffs.  The lack of a last-modified is the hint that it
+     * doesn't understand if-modified-since.
+     */
+    if( entry->timestamp == entry->lastmod )
+    {
+      debug(22, 3, "refreshCheck: NO: remote server probably incapable\n" );
+      return 0;
     }
     factor = 100 * age / (entry->timestamp - entry->lastmod);
     debug(22, 3, "refreshCheck: factor = %d\n", factor);
-- David Hankins, "If you don't do it right the first time, Network Mercenary you'll just have to do it again." -- J.T. Hankins ----- End forwarded message ----- ----- End forwarded message ----- --MimeMultipartBoundary--Received on Tue Jul 29 2003 - 13:15:51 MDT
This archive was generated by hypermail pre-2.1.9 : Tue Dec 09 2003 - 16:11:49 MST