diff --git a/application/Espo/EntryPoints/Avatar.php b/application/Espo/EntryPoints/Avatar.php index 6afcb21ffc..754264b49b 100644 --- a/application/Espo/EntryPoints/Avatar.php +++ b/application/Espo/EntryPoints/Avatar.php @@ -76,6 +76,9 @@ class Avatar extends Image */ private string $fontFile = 'vendor/lasserafn/php-initial-avatar-generator/src/fonts/OpenSans-Semibold.ttf'; + private int $maxAge = 600; + private int $staleWhileRevalidate = 864000; + private function getColor(User $user): string { if ($user->getUserName() === SystemUser::NAME) { @@ -147,9 +150,12 @@ class Avatar extends Image id: $user->getAvatarId(), size: $size, disableAccessCheck: true, - etag: $user->getAvatarId(), + noCache: true, ); + $response->setHeader('Cache-Control', $this->composeCacheControlHeader()); + $response->setHeader('Etag', $user->getAvatarId()); + return; } @@ -192,13 +198,18 @@ class Avatar extends Image ->generate(); $response - ->setHeader('Cache-Control', 'max-age=600, stale-while-revalidate=864000') + ->setHeader('Cache-Control', $this->composeCacheControlHeader()) ->setHeader('Content-Type', 'image/png') ->setHeader('Etag', $etag); $response->writeBody($image->stream('png', 100)); } + private function composeCacheControlHeader(): string + { + return "max-age=$this->maxAge, stale-while-revalidate=$this->staleWhileRevalidate"; + } + /** * @throws Error */ @@ -242,7 +253,7 @@ class Avatar extends Image $response ->setHeader('Content-Type', 'image/png') - ->setHeader('Cache-Control', 'max-age=600, stale-while-revalidate=864000') + ->setHeader('Cache-Control', $this->composeCacheControlHeader()) ->setHeader('Etag', $etag) ->writeBody($contents); } diff --git a/application/Espo/EntryPoints/Image.php b/application/Espo/EntryPoints/Image.php index b7e8a619af..e49f94c317 100644 --- a/application/Espo/EntryPoints/Image.php +++ b/application/Espo/EntryPoints/Image.php @@ -90,7 +90,7 @@ class Image implements EntryPoint string $id, ?string $size, bool $disableAccessCheck = false, - ?string $etag = null, + bool $noCache = false, ): void { $attachment = $this->entityManager->getRDBRepositoryByClass(Attachment::class)->getById($id); @@ -155,10 +155,7 @@ class Image implements EntryPoint ->setHeader('Content-Length', (string) $fileSize) ->setHeader('Content-Security-Policy', "default-src 'self'"); - if ($etag) { - $response->setHeader('Cache-Control', 'max-age=600, stale-while-revalidate=864000'); - $response->setHeader('Etag', $etag); - } else { + if (!$noCache) { $response->setHeader('Cache-Control', 'private, max-age=864000, immutable'); } }