Issue #3454507 by hablat, catch: Aggregated asset generation causes uncacheable assets
(cherry picked from commit 4f37d8d64c
)
merge-requests/9515/head
parent
5eb99caa5f
commit
572b08c076
|
@ -16,6 +16,7 @@ use Drupal\Core\Theme\ThemeInitializationInterface;
|
|||
use Drupal\Core\Theme\ThemeManagerInterface;
|
||||
use Drupal\system\FileDownloadController;
|
||||
use Symfony\Component\HttpFoundation\BinaryFileResponse;
|
||||
use Symfony\Component\HttpFoundation\RedirectResponse;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
|
||||
|
@ -183,6 +184,11 @@ abstract class AssetControllerBase extends FileDownloadController {
|
|||
$generated_hash = $this->generateHash($group);
|
||||
$data = $this->optimizer->optimizeGroup($group);
|
||||
|
||||
$response = new Response($data, 200, [
|
||||
'Cache-control' => static::CACHE_CONTROL,
|
||||
'Content-Type' => $this->contentType,
|
||||
]);
|
||||
|
||||
// However, the hash from the library definitions in code may not match the
|
||||
// hash from the URL. This can be for three reasons:
|
||||
// 1. Someone has requested an outdated URL, i.e. from a cached page, which
|
||||
|
@ -198,10 +204,15 @@ abstract class AssetControllerBase extends FileDownloadController {
|
|||
if (hash_equals($generated_hash, $received_hash)) {
|
||||
$this->dumper->dumpToUri($data, $this->assetType, $uri);
|
||||
}
|
||||
return new Response($data, 200, [
|
||||
'Cache-control' => static::CACHE_CONTROL,
|
||||
'Content-Type' => $this->contentType,
|
||||
]);
|
||||
else {
|
||||
$expected_filename = $this->fileExtension . '_' . $generated_hash . '.' . $this->fileExtension;
|
||||
$response = new RedirectResponse(
|
||||
str_replace($file_name, $expected_filename, $request->getRequestUri()),
|
||||
301,
|
||||
['Cache-Control' => 'public, max-age=3600, must-revalidate'],
|
||||
);
|
||||
}
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -187,16 +187,12 @@ class AssetOptimizationTest extends BrowserTestBase {
|
|||
$session->visit($this->setInvalidLibrary($url));
|
||||
$this->assertSession()->statusCodeEquals(200);
|
||||
|
||||
// When an invalid asset hash name is given.
|
||||
$session->visit($this->replaceGroupHash($url));
|
||||
$this->assertSession()->statusCodeEquals(200);
|
||||
$headers = $session->getResponseHeaders();
|
||||
$this->assertEquals(['no-store, private'], $headers['Cache-Control']);
|
||||
|
||||
// And again to confirm it's not cached on disk.
|
||||
$session->visit($this->replaceGroupHash($url));
|
||||
$this->assertSession()->statusCodeEquals(200);
|
||||
$headers = $session->getResponseHeaders();
|
||||
$this->assertEquals(['no-store, private'], $headers['Cache-Control']);
|
||||
$current_url = $session->getCurrentUrl();
|
||||
// Redirect to the correct one.
|
||||
$this->assertEquals($url, $current_url);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue