The use of HTTP 400 dates back to T35646, which was to address caching proxies and mobile browsers incorrectly caching bad titles as valid content. However, this also means that caches in front of MediaWiki, like Varnish, don't cache it either. Since we know that these titles will always have no content, having these get cached in Varnish is totally fine. Presumably the 404 will be enough to tell other crawlers or scrapers that there's still no content on these pages. There's some room for debate on whether a HTTP 400 or 404 is more technically correct here, but emitting a 404 seems like the more pragmatic option. Change-Id: I7b16f30ca6fd9a68f2a410692582692610f1f944
64 lines
2.1 KiB
PHP
64 lines
2.1 KiB
PHP
<?php
|
|
/**
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
* http://www.gnu.org/copyleft/gpl.html
|
|
*
|
|
* @file
|
|
*/
|
|
|
|
/**
|
|
* Show an error page on a badtitle.
|
|
*
|
|
* We always emit a HTTP 404 error code since pages with an invalid title will
|
|
* never have any content. In the past this emitted a 400 error code to ensure
|
|
* caching proxies and mobile browsers don't cache it as valid content (T35646),
|
|
* but that had the disadvantage of telling caches in front of MediaWiki
|
|
* (Varnish, etc.), not to cache it either.
|
|
*
|
|
* @newable
|
|
* @since 1.19
|
|
* @ingroup Exception
|
|
*/
|
|
class BadTitleError extends ErrorPageError {
|
|
/**
|
|
* @stable to call
|
|
*
|
|
* @param string|Message|MalformedTitleException $msg A message key (default: 'badtitletext'), or
|
|
* a MalformedTitleException to figure out things from
|
|
* @param array $params Parameter to wfMessage()
|
|
*/
|
|
public function __construct( $msg = 'badtitletext', $params = [] ) {
|
|
if ( $msg instanceof MalformedTitleException ) {
|
|
$errorMessage = $msg->getErrorMessage();
|
|
if ( !$errorMessage ) {
|
|
parent::__construct( 'badtitle', 'badtitletext', [] );
|
|
} else {
|
|
$errorMessageParams = $msg->getErrorMessageParameters();
|
|
parent::__construct( 'badtitle', $errorMessage, $errorMessageParams );
|
|
}
|
|
} else {
|
|
parent::__construct( 'badtitle', $msg, $params );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
public function report( $action = self::SEND_OUTPUT ) {
|
|
global $wgOut;
|
|
$wgOut->setStatusCode( 404 );
|
|
parent::report( $action );
|
|
}
|
|
}
|