resourceloader: Always send headers with a 304 response

There was a code path that sent plain 304s without Expires or any
other headers. Fix this by moving the call to sendResponseHeaders()
into tryLastModified().

Bug: 51283
Change-Id: I15d13c5d32102f53bf3e3aaac01d76967e968f78
This commit is contained in:
Roan Kattouw 2013-07-18 10:52:23 -07:00 committed by Krinkle
parent a129edcc5e
commit a4379d8f9e
2 changed files with 7 additions and 3 deletions

View file

@ -17,6 +17,7 @@ production.
==== External libraries ====
=== Bug fixes in 1.26 ===
* (bug 51283) load.php sometimes sends 304 response without full headers
=== Action API changes in 1.26 ===
* API action=query&list=tags: The displayname can now be boolean false if the

View file

@ -764,6 +764,9 @@ class ResourceLoader {
header( 'HTTP/1.0 304 Not Modified' );
header( 'Status: 304 Not Modified' );
// Send content type and cache headers
$this->sendResponseHeaders( $context, $mtime, false );
return true;
}
}
@ -798,18 +801,18 @@ class ResourceLoader {
}
if ( $good ) {
$ts = $fileCache->cacheTimestamp();
// Send content type and cache headers
$this->sendResponseHeaders( $context, $ts, false );
// If there's an If-Modified-Since header, respond with a 304 appropriately
if ( $this->tryRespondLastModified( $context, $ts ) ) {
return false; // output handled (buffers cleared)
}
$response = $fileCache->fetchText();
// Capture any PHP warnings from the output buffer and append them to the
// response in a comment if we're in debug mode.
if ( $context->getDebug() && strlen( $warnings = ob_get_contents() ) ) {
$response = "/*\n$warnings\n*/\n" . $response;
}
// Send content type and cache headers
$this->sendResponseHeaders( $context, $ts, false );
$response = $fileCache->fetchText();
// Remove the output buffer and output the response
ob_end_clean();
echo $response . "\n/* Cached {$ts} */";