From e6822bb874897a41a78c0672d80b96aeec411b37 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 | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/EventSubscriber/CacheControlOverrideSubscriber.php b/src/EventSubscriber/CacheControlOverrideSubscriber.php index 558b4ab..69b09c8 100644 --- a/src/EventSubscriber/CacheControlOverrideSubscriber.php +++ b/src/EventSubscriber/CacheControlOverrideSubscriber.php @@ -4,6 +4,8 @@ declare(strict_types=1); namespace Drupal\cache_control_override\EventSubscriber; +use DateTime; +use Exception; use Drupal\Core\Cache\CacheableResponseInterface; use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\Config\ConfigFactoryInterface; @@ -83,6 +85,14 @@ 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 e3ed50dded38654e8023d6863070c4df66436584 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 69b09c8..950e8a3 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