From 2b2ce752d98f58e76c48e9f9a30a3efcabbf491b Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Fri, 3 Jul 2015 02:27:05 +0100 Subject: [PATCH] RawAction: Clean up max-age/s-maxage computation No behavioural change, but makes the code easier to understand. It was somewhat all scattered. * Remove outdated comment about 24 hours. - ForcedRawSMaxage defaults to 5 minutes. - SquidMaxage defaults to 5 hours (wmf-config: 31 days). Change-Id: I7f3b67780ba9e8c024dcbd68772495b91abb2d01 --- includes/DefaultSettings.php | 7 ++++-- includes/actions/RawAction.php | 42 +++++++++++++++------------------- 2 files changed, 23 insertions(+), 26 deletions(-) diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 7dbe35a8d9..f233ad71b6 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -2541,13 +2541,16 @@ $wgInternalServer = false; /** * Cache timeout for the squid, will be sent as s-maxage (without ESI) or * Surrogate-Control (with ESI). Without ESI, you should strip out s-maxage in - * the Squid config. 18000 seconds = 5 hours, more cache hits with 2678400 = 31 - * days + * the Squid config. + * +* 18000 seconds = 5 hours, more cache hits with 2678400 = 31 days. */ $wgSquidMaxage = 18000; /** * Default maximum age for raw CSS/JS accesses + * + * 300 seconds = 5 minutes. */ $wgForcedRawSMaxage = 300; diff --git a/includes/actions/RawAction.php b/includes/actions/RawAction.php index b04ffbe2d9..b71b0e9eda 100644 --- a/includes/actions/RawAction.php +++ b/includes/actions/RawAction.php @@ -34,10 +34,10 @@ */ class RawAction extends FormlessAction { /** - * @var bool Does the request include a gen=css|javascript parameter - * @deprecated This used to be a string for "css" or "javascript" but - * it is no longer used. Setting this parameter results in empty content - * being served + * Whether the request includes a 'gen' parameter + * @var bool + * @deprecated since 1.17 This used to be a string for "css" or "javascript" but + * it is no longer used. Setting this parameter results in an empty response. */ private $gen = false; @@ -56,6 +56,7 @@ class RawAction extends FormlessAction { function onView() { $this->getOutput()->disable(); $request = $this->getRequest(); + $response = $request->response(); $config = $this->context->getConfig(); if ( !$request->checkUrlExtension() ) { @@ -66,42 +67,35 @@ class RawAction extends FormlessAction { return; // Client cache fresh and headers sent, nothing more to do. } - # special case for 'generated' raw things: user css/js - # This is deprecated and will only return empty content $gen = $request->getVal( 'gen' ); - $smaxage = $request->getIntOrNull( 'smaxage' ); - if ( $gen == 'css' || $gen == 'js' ) { $this->gen = true; - if ( $smaxage === null ) { - $smaxage = $config->get( 'SquidMaxage' ); - } } $contentType = $this->getContentType(); - # Force caching for CSS and JS raw content, default: 5 minutes. - # Note: If using a canonical url for userpage css/js, we send an HTCP purge. + $maxage = $request->getInt( 'maxage', $config->get( 'SquidMaxage' ) ); + $smaxage = $request->getIntOrNull( 'smaxage' ); if ( $smaxage === null ) { - if ( $contentType == 'text/css' || $contentType == 'text/javascript' ) { + if ( $this->gen ) { + $smaxage = $config->get( 'SquidMaxage' ); + } elseif ( $contentType == 'text/css' || $contentType == 'text/javascript' ) { + // CSS/JS raw content has its own squid max age configuration. + // Note: Title::getSquidURLs() includes action=raw for css/js pages, + // so if using the canonical url, this will get HTCP purges. $smaxage = intval( $config->get( 'ForcedRawSMaxage' ) ); } else { + // No squid cache for anything else $smaxage = 0; } } - $maxage = $request->getInt( 'maxage', $config->get( 'SquidMaxage' ) ); - - $response = $request->response(); - $response->header( 'Content-type: ' . $contentType . '; charset=UTF-8' ); - # Output may contain user-specific data; - # vary generated content for open sessions on private wikis + // Output may contain user-specific data; + // vary generated content for open sessions on private wikis $privateCache = !User::isEveryoneAllowed( 'read' ) && ( $smaxage == 0 || session_id() != '' ); - // Bug 53032 - make this private if user is logged in, - // so we don't accidentally cache cookies - $privateCache = $privateCache ?: $this->getUser()->isLoggedIn(); - # allow the client to cache this for 24 hours + // Don't accidentally cache cookies if user is logged in (T55032) + $privateCache = $privateCache || $this->getUser()->isLoggedIn(); $mode = $privateCache ? 'private' : 'public'; $response->header( 'Cache-Control: ' . $mode . ', s-maxage=' . $smaxage . ', max-age=' . $maxage -- 2.20.1