Hi, I'm proposing a hotfix release of dokuwiki, version 2006-03-06c
What do you think?
Thanks Oliver
-- Oliver Schulze L. <oliver@xxxxxxxxxxxxx>
--- js.php.ori 2006-07-24 10:57:52.000000000 -0400 +++ js.php 2006-07-24 10:35:34.000000000 -0400 @@ -55,10 +55,16 @@ // get possible plugin scripts $plugins = js_pluginscripts(); - // check cache age here + // check cache age & handle conditional request + header('Cache-Control: public, max-age=3600'); + header('Pragma: public'); if(js_cacheok($cache,array_merge($files,$plugins))){ + http_conditionalRequest(filemtime($cache)); + if($conf['allowdebug']) header("X-CacheUsed: $cache"); readfile($cache); return; + } else { + http_conditionalRequest(time()); } // start output buffering and build the script
--- pageutils.php.ori 2006-07-24 10:57:31.000000000 -0400 +++ pageutils.php 2006-07-24 10:29:05.000000000 -0400 @@ -330,4 +330,40 @@ return !isHiddenPage($id); } +/** + * Checks and sets HTTP headers for conditional HTTP requests + * + * @author Simon Willison <swillison@xxxxxxxxx> + * @link http://simon.incutio.com/archive/2003/04/23/conditionalGet + */ +function http_conditionalRequest($timestamp){ + // A PHP implementation of conditional get, see + // http://fishbowl.pastiche.org/archives/001132.html + $last_modified = substr(date('r', $timestamp), 0, -5).'GMT'; + $etag = '"'.md5($last_modified).'"'; + // Send the headers + header("Last-Modified: $last_modified"); + header("ETag: $etag"); + // See if the client has provided the required headers + $if_modified_since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? + stripslashes($_SERVER['HTTP_IF_MODIFIED_SINCE']) : + false; + $if_none_match = isset($_SERVER['HTTP_IF_NONE_MATCH']) ? + stripslashes($_SERVER['HTTP_IF_NONE_MATCH']) : + false; + if (!$if_modified_since && !$if_none_match) { + return; + } + // At least one of the headers is there - check them + if ($if_none_match && $if_none_match != $etag) { + return; // etag is there but doesn't match + } + if ($if_modified_since && $if_modified_since != $last_modified) { + return; // if-modified-since is there but doesn't match + } + // Nothing has changed since their last request - serve a 304 and exit + header('HTTP/1.0 304 Not Modified'); + exit; +} + //Setup VIM: ex: et ts=2 enc=utf-8 :
--- css.php.ori 2006-07-24 10:57:48.000000000 -0400 +++ css.php 2006-07-24 10:34:38.000000000 -0400 @@ -67,10 +67,16 @@ $files[DOKU_CONF.'userstyle.css'] = ''; } - // check cache age + // check cache age & handle conditional request + header('Cache-Control: public, max-age=3600'); + header('Pragma: public'); if(css_cacheok($cache,array_keys($files))){ + http_conditionalRequest(filemtime($cache)); + if($conf['allowdebug']) header("X-CacheUsed: $cache"); readfile($cache); return; + } else { + http_conditionalRequest(time()); } // start output buffering and build the stylesheet