]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
HTTP/1.1: honour Cache-Control before Pragma:no-cache
authorAmos Jeffries <squid3@treenet.co.nz>
Tue, 16 Oct 2012 01:38:43 +0000 (19:38 -0600)
committerAmos Jeffries <squid3@treenet.co.nz>
Tue, 16 Oct 2012 01:38:43 +0000 (19:38 -0600)
HTTPbis WG clarifications on the interaction between Cache-Control and
Pragma specify that Cache-Control may be explicitly crafted to allow
conditional caching by HTTP/1.1 caches and Pragma:no-cache supplied to
prevent caching by older HTTP/1.0 caches unable to understand the
Cache-Control properly.

Squid does obey Cache-Control. So we can deprecate Pragma to the side
cases when Cache-Control is absent entirely.

src/client_side_request.cc

index a4df356dd6e8a15197e5025fc3d87db98945d1e4..7eb4185ae3bc9184f488c6f5138559d830f89917 100644 (file)
@@ -1046,19 +1046,14 @@ clientInterpretRequestHeaders(ClientHttpRequest * http)
         request->flags.ims = 1;
 
     if (!request->flags.ignoreCc) {
-        if (req_hdr->has(HDR_PRAGMA)) {
-            String s = req_hdr->getList(HDR_PRAGMA);
-
-            if (strListIsMember(&s, "no-cache", ','))
-                no_cache=true;
-
-            s.clean();
-        }
-
         if (request->cache_control)
             if (request->cache_control->noCache())
                 no_cache=true;
 
+        // RFC 2616: treat Pragma:no-cache as if it was Cache-Control:no-cache when Cache-Control is missing
+        else if (req_hdr->has(HDR_PRAGMA))
+            no_cache = req_hdr->hasListMember(HDR_PRAGMA,"no-cache",',');
+
         /*
         * Work around for supporting the Reload button in IE browsers when Squid
         * is used as an accelerator or transparent proxy, by turning accelerated