This adds a directive configure_miss_revalidate
based closely on squid-2.7 ignore_ims_on_miss by Henrik.

The following changes are made:

* rename to cache_miss_revalidate
 Inverted the behaviour viewpoint from suppression to
 one of ability extension.

* fix RFC 2616 violation in 2.7 REFRESH
 In 2.7 any If-None-Match values added by Squid on a
 refresh HIT caused client header values to be dropped.

 The two sets of values need to be combined and delivered
 to the server to preserve '*' special case and allow a
 304 from server with ETag to be reliably authoritative
 in regards to the client delivered ETag values.
 Otherwise the server might return ambiguous succcess
 regarding Squid ETag when it should have sent 412
 regarding a client ETag.

* handle case where client is sending 'If-None-Match: *'

* remove HTTP_VIOLATIONS requirement
 This behaviour is permitted within the RFC 2616 update
 clarifications from IETF HTTPbis WG.

* improved documentation of behaviour and use cases


For now the default setting is to retain the current behaviour
of Squid-3 and Squid-2.7. Which is to pass If-* headers
through and continue MISS until e full fetch is requested
by a client.

Amos
=== modified file 'configure.ac'
--- configure.ac        2013-09-27 15:21:54 +0000
+++ configure.ac        2013-09-27 17:07:20 +0000
@@ -42,14 +42,14 @@
 # might be cross-compiling.
 if test "x$HOSTCXX" = "x"; then
   HOSTCXX="$CXX"
-  if test "x$squid_cv_check_marchnative" = "xyes"; then
-    CXXFLAGS="$CXXFLAGS -march=native"
-  fi
-fi
-if test "x$squid_cv_check_marchnative" = "xyes"; then
-  # always valid for the Host compiler.
-  HOSTCXX="$HOSTCXX -march=native"
-fi
+#  if test "x$squid_cv_check_marchnative" = "xyes"; then
+#    CXXFLAGS="$CXXFLAGS -march=native"
+#  fi
+fi
+#if test "x$squid_cv_check_marchnative" = "xyes"; then
+#  # always valid for the Host compiler.
+#  HOSTCXX="$HOSTCXX -march=native"
+#fi
 AC_SUBST(HOSTCXX)
 
 AC_MSG_CHECKING([simplified host os])

=== modified file 'doc/release-notes/release-3.3.sgml'
--- doc/release-notes/release-3.3.sgml  2013-09-11 01:31:14 +0000
+++ doc/release-notes/release-3.3.sgml  2013-09-29 12:06:06 +0000
@@ -180,6 +180,12 @@
 <sect1>New tags<label id="newtags">
 <p>
 <descrip>
+       <tag>cache_miss_revalidate</tag>
+       <p>Whether Squid is to pass-through If-Modified-Since and If-None-Match 
headers on cache MISS.
+          Revalidation requests can prevent cache gathering objects to HIT on.
+       <p>Based on the Squid-2.7 <em>ignore_ims_on_miss</em> feature.
+       <p><em>IMPORTANT:</em> the meaning for on/off values has changed along 
with the name since 2.7.
+
        <tag>request_header_add</tag>
        <p>New directive to add custom headers on HTTP traffic sent to upstream 
servers.
 
@@ -231,7 +237,8 @@
 <p>
 <descrip>
 
-       <p><em>There are no removed squid.conf options in Squid-3.3.</em>
+       <tag>ignore_ims_on_miss</tag>
+       <p>This option has been replaced by the <em>cache_miss_revalidate</em> 
feature.
 
 </descrip>
 
@@ -318,9 +325,6 @@
        <tag>external_refresh_check</tag>
        <p>Not yet ported from 2.7
 
-       <tag>ignore_ims_on_miss</tag>
-       <p>Not yet ported from 2.7
-
        <tag>location_rewrite_access</tag>
        <p>Not yet ported from 2.6
 

=== modified file 'src/SquidConfig.h'
--- src/SquidConfig.h   2013-08-01 20:45:56 +0000
+++ src/SquidConfig.h   2013-09-29 08:52:12 +0000
@@ -337,6 +337,7 @@
         int check_hostnames;
         int allow_underscore;
         int via;
+        int cache_miss_revalidate;
         int emailErrData;
         int httpd_suppress_version_string;
         int global_internal_static;

=== modified file 'src/cache_cf.cc'
--- src/cache_cf.cc     2013-08-29 09:21:53 +0000
+++ src/cache_cf.cc     2013-09-29 09:14:28 +0000
@@ -1013,6 +1013,14 @@
 
     if (!strcmp(name, "log_icap"))
         self_destruct();
+
+    if (!strcmp(name, "ignore_ims_on_miss")) {
+        // the replacement directive cache_revalidate_on_miss has opposite 
meanings for ON/OFF value
+        // than the 2.7 directive. We need to parse and invert the configured 
value.
+        int temp = 0;
+        parse_onoff(&temp);
+        Config.onoff.cache_miss_revalidate = !temp;
+    }
 }
 
 /* Parse a time specification from the config file.  Store the

=== modified file 'src/cf.data.pre'
--- src/cf.data.pre     2013-08-29 09:21:53 +0000
+++ src/cf.data.pre     2013-09-29 09:15:12 +0000
@@ -148,12 +148,6 @@
        This option is not yet supported by Squid-3.
 DOC_END
 
-NAME: ignore_ims_on_miss
-TYPE: obsolete
-DOC_START
-       This option is not yet supported by Squid-3.
-DOC_END
-
 NAME: location_rewrite_program location_rewrite_access 
location_rewrite_children location_rewrite_concurrency
 TYPE: obsolete
 DOC_START
@@ -166,7 +160,12 @@
        This option is not yet supported by Squid-3.
 DOC_END
 
-# no Options Removed in 3.3
+# Options Removed in 3.3
+NAME: ignore_ims_on_miss
+TYPE: obsolete
+DOC_START
+       Remove this line. The HTTP/1.1 feature is now fully supported by 
default.
+DOC_END
 
 # Options Removed in 3.2
 NAME: ignore_expect_100
@@ -7310,6 +7309,25 @@
        acts on cacheable requests.
 DOC_END
 
+NAME: cache_miss_revalidate
+COMMENT: on|off
+TYPE: onoff
+DEFAULT: on
+LOC: Config.onoff.cache_miss_revalidate
+DOC_START
+       Whether Squid on cache MISS will pass client revalidation requests
+       to the server or tries to fetch new content for caching.
+       This is useful while the cache is mostly empty to more quickly
+       have the cache populated.
+
+       When set to 'on' (default), Squid will pass all client If-* headers
+       to the server.
+
+       When set to 'off' and if the request is cacheable, Squid will
+       remove the clients If-Modified-Since and If-None-Match headers from
+       the request sent to the server.
+DOC_END
+
 NAME: always_direct
 TYPE: acl_access
 LOC: Config.accessList.AlwaysDirect

=== modified file 'src/http.cc'
--- src/http.cc 2013-07-16 00:13:03 +0000
+++ src/http.cc 2013-09-29 11:22:17 +0000
@@ -1966,12 +1966,30 @@
 
     case HDR_IF_MODIFIED_SINCE:
         /** \par If-Modified-Since:
-        * append unless we added our own;
-         * \note at most one client's ims header can pass through */
+         * append unless we added our own,
+         * but only if cache_miss_revalidate is enabled, or
+         *  the request is not cacheable, or
+         *  the request contains authentication credentials.
+         * \note at most one client's If-Modified-Since header can pass through
+         */
+        // XXX: need to check and cleanup the auth case so cacheable auth 
requests get cached.
+        if (hdr_out->has(HDR_IF_MODIFIED_SINCE))
+            break;
+        else if (Config.onoff.cache_miss_revalidate || 
!request->flags.cachable || request->flags.auth)
+                hdr_out->addEntry(e->clone());
+        break;
 
-        if (!hdr_out->has(HDR_IF_MODIFIED_SINCE))
+    case HDR_IF_NONE_MATCH:
+        /** \par If-None-Match:
+         * append if the wildcard '*' special case value is present, or
+         *   cache_miss_revalidate is disabled, or
+         *   the request is not cacheable in this proxy, or
+         *   the request contains authentication credentials.
+         * \note this header lists a set of responses for the server to elide 
sending. Squid added values are extending that set.
+         */
+        // XXX: need to check and cleanup the auth case so cacheable auth 
requests get cached.
+        if (hdr_out->hasListMember(HDR_IF_MATCH, "*", ',') || 
Config.onoff.cache_miss_revalidate || !request->flags.cachable || 
request->flags.auth)
             hdr_out->addEntry(e->clone());
-
         break;
 
     case HDR_MAX_FORWARDS:

Reply via email to