From b070125f51715a7fdbd40a7eb3dadd3c77b4af50 Mon Sep 17 00:00:00 2001 From: aramesh-site deploy Date: Wed, 30 Sep 2026 10:53:46 +0000 Subject: [PATCH] =?UTF-8?q?fix(frontend):=20=D9=85=D8=B3=DB=8C=D8=B1=D9=87?= =?UTF-8?q?=D8=A7=DB=8C=20/assets/*=20=D9=87=D8=B1=DA=AF=D8=B2=20=D8=A8?= =?UTF-8?q?=D9=87=20index.html=20=D8=A8=D8=B1=D9=86=DA=AF=D8=B1=D8=AF?= =?UTF-8?q?=D9=86=D8=AF=20=E2=80=94=20=D9=85=D8=B3=D9=85=D9=88=D9=85?= =?UTF-8?q?=E2=80=8C=D8=B4=D8=AF=D9=86=20=DA=A9=D8=B4=20CDN?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit در پنجرهٔ تعویض کانتینر فرانت‌اند، درخواستِ هشِ جدید که در dist کانتینرِ در حال اجرا نبود با fallback اسپا پاسخ 200ٔ text/html می‌گرفت؛ CDN (WCDN، SMART) همین پاسخ HTML را زیر URL فایل جاوااسکریپت با هدر immutable یک‌ساله کش می‌کرد و اسکریپت ماژول برای همهٔ بازدیدکننده‌ها می‌شکست (سایت روی پری‌لودر قفل می‌شد). حالا فایل ناموجود در assets واقعاً 404 می‌دهد که کش نمی‌شود. --- frontend/Caddyfile | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/frontend/Caddyfile b/frontend/Caddyfile index 4e214cb..285e417 100644 --- a/frontend/Caddyfile +++ b/frontend/Caddyfile @@ -7,15 +7,23 @@ root * /srv encode zstd gzip - # مسیریابی SPA — مسیرهای ناشناخته به index.html برمی‌گردند - try_files {path} /index.html - file_server - - # فایل‌های هش‌دار بیلد: کش بلندمدت بی‌رحم + # فایل‌های هش‌دار بیلد: کش بلندمدت بی‌رحم — ولی هرگز fallback به index.html نداشته باشند؛ + # پاسخ 200ٔ HTML برای یک مسیر /assets/* نبوده (مثلاً هنگام پنجرهٔ تعویض کانتینر در استقرار) + # توسط CDN (WCDN، سیاست SMART) با همین هدر immutable یک سال کش می‌شود و اسکریپت ماژول + # را برای همه بازدیدکننده‌ها می‌شکند. فایل ناموجود در assets باید 404 بدهد، نه HTML. @assets path /assets/* - header @assets Cache-Control "public, immutable, max-age=31536000" + handle @assets { + file_server + } + + # مسیریابی SPA — مسیرهای ناشناختهٔ غیرasset به index.html برمی‌گردند + handle { + try_files {path} /index.html + file_server + } # بقیه (از جمله index.html و fallback اسپا): بدون کش مرورگر تا هر استقرار فوری دیده شود @notassets not path /assets/* header @notassets Cache-Control "no-cache" + header @assets Cache-Control "public, immutable, max-age=31536000" }