چرا محتوای من در کلودگارد کش نمی‌شود؟

مساله

شما سایت خود را پشت کلودگارد قرار داده و مکانیزم کش را فعال کرده‌اید. اما محتوای (برخی آدرس‌های) سایت شما کش نمی‌شود و از سرور مبدا دریافت می‌شود.

علت

کش نشدن محتوا می‌تواند به چند علت باشد که به ترتیب به آنها اشاره می‌شود:

  • Cache Mode: شما مکانیزم Cache را روی سایت خود فعال نکرده‌اید.
  • Developer Mode: مکانیزم Cache سایت شما در وضعیت Developer Mode است. (در این وضعیت هیچ محتوایی کش نمی‌شود و کلودگارد به قوانین صفحه نیز توجه نمی‌کند)
  • Non-Static Files: به صورت پیش‌فرض کلودگارد فقط محتوای ایستا را کش می‌کند. به عبارت دیگر آدرس‌هایی از سایت شما که یکی از پسوندهای ایستا مانند jpg, js, css و … را داشته باشند کش می‌شوند. فایل‌های html و مانند آن کش نمی‌شوند. اگر می‌خواهید کل سایت کش شود می‌توانید یک قانون صفحه بسازید که با کل محتوا تطبیق یابد و کش را روی آن فعال کنید. (لیست پسوندهایی که کلودگارد محتوای ایستا فرض می‌کند)
  • Page Rule: شما می‌توانید با استفاده از قوانین صفحه کش را برای یک آدرس خاص فعال یا غیرفعال کنید.
  • Cache-Control: سرور مبدا شما هدر Cache-Control را بر روی یکی از مقادیر private, no-store, no-cache و مانند آن تنظیم می‌کند. این مقادیر به CDN اعلام می‌کنند که این صفحه نباید کش شود و در نتیجه محتوا در کش ذخیره نخواهد شد.
  • Expires: سرور مبدا شما هدر Expires را در یک تاریخ قدیمی تنظیم می‌کند. به این ترتیب محتوا به محض دریافت منقضی شده تلقی می‌شود و کش نمی‌شود.
  • Set-Cookie: سرور مبدا شما هدر Set-Cookie را در پاسخ ارسال می‌کند. صفحاتی که در آنها کوکی برای مرورگر تنظیم می‌شود کش نمی‌شوند، چرا که محتوای کوکی برای تفکیک کاربران مختلف از یکدیگر به کار رفته و بعضا دارای مقادیر امنیتی مانند کلید نشست (Session Key) و مانند آن هستند. لذا درخواستی که منجر به تنظیم کوکی می‌شود در CDN کش نمی‌شود. (دقت کنید که سایر صفحات که کوکی را تغییر نمی‌دهند کش می‌شوند و فقط درخواستی که منجر به تغییر کوکی شده  کش نمی‌شود)

عیب‌یابی

جهت رویت وضعیت کش صفحات خود می‌توانید هدر CG-Cache-Status را بررسی کنید. این هدر یکی از مقادیر زیر را نشان می‌دهد:

  • HIT: صفحه کش شده بوده و برای مرورگر ارسال شده است.
  • MISS: صفحه در کش موجود نبوده و از سرور مبدا دریافت شده و اکنون کش است. (در درخواست بعدی باید HIT دریافت کنید، مگر اینکه به علت گذر زمان یا حذف کش منقضی شود)
  • EXPIRED: مانند MISS، ولی کش موجود منقضی بوده و به این علت مجددا دریافت شده است.
  • UPDATING, STALE: این وضعیت فقط در حالتی که Always On‌ را فعال کرده باشید رخ می‌دهد. در این حالت کش منقضی شده است اما سرور مبدا پاسخ نداده یا خطا می‌دهد و به همین علت آخرین محتوای کش (علی‌رغم انقضا) به کلاینت ارسال شده است.
  • خالی: اگر هدر CG-Cache-Status وجود ندارد، به این معنی است که برای این صفحه کش فعال نبوده است.

روش بررسی

برای مشاهده هدر CG-Cache-Status در مرورگر خود باید Developer Tools (معمولا کلید F12) را فعال نمایید و به برگه Networks بروید.

در این صفحه روی هر یک از درخواست‌ها کلیک کرده و موارد زیر را بررسی کنید:

  1. ابتدا توجه کنید که آدرس URL درخواست مربوط به کلودگارد باشد. (در بارگذاری یک صفحه ممکن است چندین محتوا از چندین سایت و دامنه متفاوت دریافت شود که لزوما تمامی آنها پشت کلودگارد قرار ندارند)
  2. هدر CG-Server-Tag نشان می‌دهد اطلاعات از کدام نود دریافت شده است. نودهای مختلف کش‌های مجزایی دارند.
  3. هدر CG-Cache-Status وضعیت کش را نشان می‌دهد.
  4. هدر Cache-Control نشان می‌دهد که سرور مبدا چه درخواستی درباره کش شدن صفحه داشته است.
  5. هدر Expires نشان می‌دهد که صفحه تا چه زمانی اجازه کش شدن دارد.
  6. هدر Set-Cookie نشان می‌دهد که سرور مبدا کوکی تنظیم کرده است یا خیر.
شما می‌توانید با کلیک راست روی ستون‌های جدول درخواست‌ها در مرورگر، و انتخاب گزینه Response Headers > Manage Custom Headers یک هدر را به جدول اضافه کنید تا مقدار آن را در یک نگاه برای تمامی درخواست‌ها ببینید.