Commit 92aeb5c0 authored by Graham Leggett's avatar Graham Leggett
Browse files

mod_cache: Respect s-maxage as described by RFC2616 14.9.3, which must

take precedence if present. PR 35247.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1069942 13f79535-47bb-0310-9956-ffa450edef68
parent 47e57ab5
Loading
Loading
Loading
Loading
+2 −3
Changes for CHANGES: 2 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -2,9 +2,8 @@

Changes with Apache 2.3.11

  *) mod_ssl: Fix a possible startup failure if multiple SSL vhosts
     are configured with the same ServerName and private key file.
     [Masahiro Matsuya <mmatsuya redhat.com>, Joe Orton]
  *) mod_cache: Respect s-maxage as described by RFC2616 14.9.3, which must
     take precedence if present. PR 35247. [Graham Leggett]

  *) mod_socache_dc: Make module compile by fixing some typos.
     PR 50735 [Mark Montague <mark catseye.org>]
+13 −7
Changes for modules/cache/cache_util.c: 13 added lines, 7 removed lines.
Original line number Diff line number Diff line
@@ -540,8 +540,16 @@ int cache_check_freshness(cache_handle_t *h, cache_request_rec *cache,
        maxage_req = cache->control_in.max_age_value;
    }

    /* extract max-age from response */
    /*
     * extract max-age from response, if both s-maxage and max-age, s-maxage
     * takes priority
     */
    if (smaxage != -1) {
        maxage_cresp = smaxage;
    }
    else {
        maxage_cresp = h->cache_obj->info.control.max_age_value;
    }

    /*
     * if both maxage request and response, the smaller one takes priority
@@ -585,15 +593,14 @@ int cache_check_freshness(cache_handle_t *h, cache_request_rec *cache,
        minfresh = 0;
    }

    /* override maxstale if must-revalidate or proxy-revalidate */
    /* override maxstale if must-revalidate, proxy-revalidate or s-maxage */
    if (maxstale && (h->cache_obj->info.control.must_revalidate
            || h->cache_obj->info.control.proxy_revalidate)) {
            || h->cache_obj->info.control.proxy_revalidate || smaxage != -1)) {
        maxstale = 0;
    }

    /* handle expiration */
    if (((smaxage != -1) && (age < (smaxage - minfresh))) ||
        ((maxage != -1) && (age < (maxage + maxstale - minfresh))) ||
    if (((maxage != -1) && (age < (maxage + maxstale - minfresh))) ||
        ((smaxage == -1) && (maxage == -1) &&
         (info->expire != APR_DATE_BAD) &&
         (age < (apr_time_sec(info->expire - info->date) + maxstale - minfresh)))) {
@@ -606,8 +613,7 @@ int cache_check_freshness(cache_handle_t *h, cache_request_rec *cache,
                      apr_psprintf(r->pool, "%lu", (unsigned long)age));

        /* add warning if maxstale overrode freshness calculation */
        if (!(((smaxage != -1) && age < smaxage) ||
              ((maxage != -1) && age < maxage) ||
        if (!(((maxage != -1) && age < maxage) ||
              (info->expire != APR_DATE_BAD &&
               (apr_time_sec(info->expire - info->date)) > age))) {
            /* make sure we don't stomp on a previous warning */