RawAction: Clean up max-age/s-maxage computation
authorTimo Tijhof <krinklemail@gmail.com>
Fri, 3 Jul 2015 01:27:05 +0000 (02:27 +0100)
committerTimo Tijhof <krinklemail@gmail.com>
Fri, 3 Jul 2015 01:27:05 +0000 (02:27 +0100)
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
includes/actions/RawAction.php

index 7dbe35a..f233ad7 100644 (file)
@@ -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;
 
index b04ffbe..b71b0e9 100644 (file)
  */
 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