From eaf97ef0513a6a887b7fbc20f48ee07b9b4985c1 Mon Sep 17 00:00:00 2001 From: Pierre Rudloff <47351-prudloff@users.noreply.drupalcode.org> Date: Sat, 26 Aug 2023 18:37:22 +0200 Subject: [PATCH 1/2] Issue #2916705: Page cache isn't invalidated --- src/EventSubscriber/CacheControlOverrideSubscriber.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/EventSubscriber/CacheControlOverrideSubscriber.php b/src/EventSubscriber/CacheControlOverrideSubscriber.php index 51d77ec..ea05c40 100644 --- a/src/EventSubscriber/CacheControlOverrideSubscriber.php +++ b/src/EventSubscriber/CacheControlOverrideSubscriber.php @@ -4,9 +4,11 @@ declare(strict_types=1); namespace Drupal\cache_control_override\EventSubscriber; +use DateTime; use Drupal\Core\Cache\CacheableResponseInterface; use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\Config\ConfigFactoryInterface; +use Exception; use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\Event\ResponseEvent; @@ -83,6 +85,13 @@ final class CacheControlOverrideSubscriber implements EventSubscriberInterface { } } $response->headers->set('Cache-Control', 'public, max-age=' . $maxAge); + + try { + // This is needed because page_cache uses this header to invalidate the page cache. + $response->setExpires(new DateTime('+' . $maxAge . ' seconds')); + } catch (Exception $e) { + // Could not set Expires header because max-age is invalid. + } } } -- GitLab From d389b6ead2b20cc8b824d957974659fc42e6769c Mon Sep 17 00:00:00 2001 From: Florent Torregrosa <14238-florenttorregrosa@users.noreply.drupalcode.org> Date: Sat, 26 Aug 2023 18:41:52 +0200 Subject: [PATCH 2/2] Issue #2916705: Take global max-age into account. --- src/EventSubscriber/CacheControlOverrideSubscriber.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/EventSubscriber/CacheControlOverrideSubscriber.php b/src/EventSubscriber/CacheControlOverrideSubscriber.php index ea05c40..2155f31 100644 --- a/src/EventSubscriber/CacheControlOverrideSubscriber.php +++ b/src/EventSubscriber/CacheControlOverrideSubscriber.php @@ -84,6 +84,12 @@ final class CacheControlOverrideSubscriber implements EventSubscriberInterface { $maxAge = min($maximum, $maxAge); } } + + // Check against global max-age. + $global_max_age = $this->configFactory->get('system.performance') + ->get('cache.page.max_age'); + $maxAge = min($global_max_age, $maxAge); + $response->headers->set('Cache-Control', 'public, max-age=' . $maxAge); try { -- GitLab