diff --git a/RELEASE-NOTES-1.26 b/RELEASE-NOTES-1.26 index 57166efb718..0b3f29c6580 100644 --- a/RELEASE-NOTES-1.26 +++ b/RELEASE-NOTES-1.26 @@ -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 diff --git a/includes/resourceloader/ResourceLoader.php b/includes/resourceloader/ResourceLoader.php index f8d8d2f54b1..7da3aec8e7d 100644 --- a/includes/resourceloader/ResourceLoader.php +++ b/includes/resourceloader/ResourceLoader.php @@ -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} */";