diff --git a/app/Http/Middleware/ForceCache.php b/app/Http/Middleware/ForceCache.php new file mode 100644 index 000000000..cd1d3ee8a --- /dev/null +++ b/app/Http/Middleware/ForceCache.php @@ -0,0 +1,53 @@ +shouldCacheResponse($request, $response)) { + $response->headers->add([ + 'Cache-Control' => 'max-age=86400, public', + 'ETag' => $this->generateEtag($request), + ]); + $response->headers->remove('Set-Cookie'); + } + + return $response; + } + + public function shouldCacheResponse(Request $request, Response $response): bool + { + if (! $request->isMethod('GET')) { + return false; + } + + if (! $response->isSuccessful()) { + return false; + } + + if ($request->user()) { + return false; + } + + return true; + } + + private function generateEtag(Request $request): string + { + $uri = $request->path(); + + if ($request->getQueryString()) { + $uri .= '?' . $request->getQueryString(); + } + + return md5($uri . ':' . time()); + } +} diff --git a/app/Http/Middleware/SetCacheControlHeader.php b/app/Http/Middleware/SetCacheControlHeader.php new file mode 100644 index 000000000..a3a1c687c --- /dev/null +++ b/app/Http/Middleware/SetCacheControlHeader.php @@ -0,0 +1,40 @@ +shouldCacheResponse($request, $response)) { + $response->headers->add([ + 'Cache-Control' => 'max-age=86400, public', + ]); + } + + return $response; + } + + public function shouldCacheResponse(Request $request, Response $response): bool + { + if (! $request->isMethod('GET')) { + return false; + } + + if (! $response->isSuccessful()) { + return false; + } + + if (app()->isLocal()) { + return false; + } + + return true; + } +}