You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by co...@apache.org on 2016/01/25 20:57:34 UTC
svn commit: r1726675 - in /httpd/httpd/trunk: CHANGES
modules/cache/mod_cache.c
Author: covener
Date: Mon Jan 25 19:57:33 2016
New Revision: 1726675
URL: http://svn.apache.org/viewvc?rev=1726675&view=rev
Log:
better s-maxage support
+ *) mod_cache: Consider Cache-Control: s-maxage in expiration
+ calculations. [Eric Covener]
+
+ *) mod_cache: Allow caching of responses with an Expires header
+ in the past that also has Cache-Control: max-age or s-maxage.
+ PR55156. [Eric Covener]
Modified:
httpd/httpd/trunk/CHANGES
httpd/httpd/trunk/modules/cache/mod_cache.c
Modified: httpd/httpd/trunk/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=1726675&r1=1726674&r2=1726675&view=diff
==============================================================================
--- httpd/httpd/trunk/CHANGES [utf-8] (original)
+++ httpd/httpd/trunk/CHANGES [utf-8] Mon Jan 25 19:57:33 2016
@@ -1,5 +1,12 @@
-*- coding: utf-8 -*-
Changes with Apache 2.5.0
+
+ *) mod_cache: Consider Cache-Control: s-maxage in expiration
+ calculations. [Eric Covener]
+
+ *) mod_cache: Allow caching of responses with an Expires header
+ in the past that also has Cache-Control: max-age or s-maxage.
+ PR55156. [Eric Covener]
*) ap_expr: expression support for variable HTTP2=on|off
[Stefan Eissing]
Modified: httpd/httpd/trunk/modules/cache/mod_cache.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/cache/mod_cache.c?rev=1726675&r1=1726674&r2=1726675&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/cache/mod_cache.c (original)
+++ httpd/httpd/trunk/modules/cache/mod_cache.c Mon Jan 25 19:57:33 2016
@@ -1041,9 +1041,12 @@ static apr_status_t cache_save_filter(ap
/* if a broken Expires header is present, don't cache it */
reason = apr_pstrcat(p, "Broken expires header: ", exps, NULL);
}
- else if (!dconf->store_expired && exp != APR_DATE_BAD
+ else if (!control.s_maxage && !control.max_age
+ && !dconf->store_expired && exp != APR_DATE_BAD
&& exp < r->request_time) {
- /* if a Expires header is in the past, don't cache it */
+ /* if a Expires header is in the past, don't cache it
+ * Unless CC: s-maxage or max-age is present
+ */
reason = "Expires header already expired; not cacheable";
}
else if (!dconf->store_expired && (control.must_revalidate
@@ -1397,7 +1400,26 @@ static apr_status_t cache_save_filter(ap
"replacing with now");
}
+
+ /* CC has priority over Expires. */
+ if (control.s_maxage || control.max_age) {
+ apr_int64_t x;
+
+ x = control.s_maxage ? control.s_maxage_value : control.max_age_value;
+ x = x * MSEC_ONE_SEC;
+
+ if (x < dconf->minex) {
+ x = dconf->minex;
+ }
+ if (x > dconf->maxex) {
+ x = dconf->maxex;
+ }
+ exp = date + x;
+ }
+
/* if no expiry date then
+ * if Cache-Control: s-maxage
+ * expiry date = date + smaxage
* if Cache-Control: max-age
* expiry date = date + max-age
* else if lastmod
@@ -1405,22 +1427,9 @@ static apr_status_t cache_save_filter(ap
* else
* expire date = date + defaultexpire
*/
- if (exp == APR_DATE_BAD) {
-
- if (control.max_age) {
- apr_int64_t x;
- x = control.max_age_value * MSEC_ONE_SEC;
-
- if (x < dconf->minex) {
- x = dconf->minex;
- }
- if (x > dconf->maxex) {
- x = dconf->maxex;
- }
- exp = date + x;
- }
- else if ((lastmod != APR_DATE_BAD) && (lastmod < date)) {
+ if (exp == APR_DATE_BAD) {
+ 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...