]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Backport:
authorJim Jagielski <jim@apache.org>
Fri, 18 May 2007 12:41:14 +0000 (12:41 +0000)
committerJim Jagielski <jim@apache.org>
Fri, 18 May 2007 12:41:14 +0000 (12:41 +0000)
   * mod_cache: Let Cache-Control max-age set the expiration date.
        Trunk version of patch:
         http://svn.apache.org/viewvc?view=rev&revision=539063
        2.2.x version of patch:
         http://people.apache.org/~jerenkrantz/max-age-expire-2.2.x.patch
         (No ->minex in 2.2.x)
        +1: jerenkrantz, fielding, striker

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@539430 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
STATUS
modules/cache/mod_cache.c

diff --git a/CHANGES b/CHANGES
index 41643a1f86b04df016c0cd3a39afa0b84be60612..88c92d465bc66206d2424ad85dca7341dfb615e1 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,9 @@
                                                         -*- coding: utf-8 -*-
 Changes with Apache 2.2.5
 
+  *) mod_cache: Let Cache-Control max-age set the expiration of the cached
+     representation if Expires is not set.  [Justin Erenkrantz]
+
   *) mod_cache: Allow caching of requests with query arguments when
      Cache-Control max-age is explicitly specified.  [Justin Erenkrantz]
 
diff --git a/STATUS b/STATUS
index b7b0263ad8e48348475f031d12c1d86c3eb5f046..18877a4b75a356588c562fcd837c9d5b4c2247f3 100644 (file)
--- a/STATUS
+++ b/STATUS
@@ -86,14 +86,6 @@ PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
       +1: jfclere, rpluem, wrowe
       jerenkrantz says: Does not apply cleanly to 2.2.x.
 
-   * mod_cache: Let Cache-Control max-age set the expiration date.
-     Trunk version of patch:
-       http://svn.apache.org/viewvc?view=rev&revision=539063
-     2.2.x version of patch:
-       http://people.apache.org/~jerenkrantz/max-age-expire-2.2.x.patch
-       (No ->minex in 2.2.x)
-     +1: jerenkrantz, fielding, striker
-
 PATCHES PROPOSED TO BACKPORT FROM TRUNK:
 
     * ApacheMonitor: Fix Windows Vista detection.
index e83eba80f467ce1b744134793395c0d410a37e1c..3dadcf2633197c9e1657e954b8fbf99c417b7096 100644 (file)
@@ -701,19 +701,39 @@ static int cache_save_filter(ap_filter_t *f, apr_bucket_brigade *in)
     }
 
     /* if no expiry date then
-     *   if lastmod
+     *   if Cache-Control: max-age present
+     *      expiry date = date + max-age
+     *   else if lastmod
      *      expiry date = date + min((date - lastmod) * factor, maxexpire)
      *   else
      *      expire date = date + defaultexpire
      */
     if (exp == APR_DATE_BAD) {
         char expire_hdr[APR_RFC822_DATE_LEN];
+        char *max_age_val;
 
-        /* if lastmod == date then you get 0*conf->factor which results in
-         *   an expiration time of now. This causes some problems with
-         *   freshness calculations, so we choose the else path...
-         */
-        if ((lastmod != APR_DATE_BAD) && (lastmod < date)) {
+        if (ap_cache_liststr(r->pool, cc_out, "max-age", &max_age_val) &&
+            max_age_val != NULL) {
+            apr_int64_t x;
+
+            errno = 0;
+            x = apr_atoi64(max_age_val);
+            if (errno) {
+                x = conf->defex;
+            }
+            else {
+                x = x * MSEC_ONE_SEC;
+            }
+            if (x > conf->maxex) {
+                x = conf->maxex;
+            }
+            exp = date + x;
+        }
+        else if ((lastmod != APR_DATE_BAD) && (lastmod < date)) {
+            /* if lastmod == date then you get 0*conf->factor which results in
+             * an expiration time of now. This causes some problems with
+             * freshness calculations, so we choose the else path...
+             */
             apr_time_t x = (apr_time_t) ((date - lastmod) * conf->factor);
 
             if (x > conf->maxex) {