diff --git a/src/StaticCaching/Middleware/Cache.php b/src/StaticCaching/Middleware/Cache.php index 86731fa0e3e..d43b1ec4f71 100644 --- a/src/StaticCaching/Middleware/Cache.php +++ b/src/StaticCaching/Middleware/Cache.php @@ -50,13 +50,15 @@ public function __construct(Cacher $cacher, Session $nocache) public function handle($request, Closure $next) { if ($response = $this->attemptToServeCachedResponse($request)) { - return $response; + return $this->addEtagToResponse($request, $response); } $lock = $this->createLock($request); try { - return $lock->block($this->lockFor, fn () => $this->handleRequest($request, $next)); + return $lock->block($this->lockFor, + fn () => $this->addEtagToResponse($request, $this->handleRequest($request, $next)) + ); } catch (LockTimeoutException $e) { return $this->outputRefreshResponse($request); } @@ -229,4 +231,15 @@ private function outputRefreshResponse($request) return response($html, 503, ['Retry-After' => 1]); } + + private function addEtagToResponse($request, $response) + { + if (! $response->isRedirect() && $content = $response->getContent()) { + $response + ->setEtag(md5($content)) + ->isNotModified($request); + } + + return $response; + } }