کش کردن (Caching) یکی از اصلی‌ترین دلایل استفاده از شبکه توزیع محتوا (CDN) است. این فرآیند با ذخیره کردن یک کپی از فایل‌های شما (مانند تصاویر، ویدیوها و کدها) روی سرورهای ما که در سراسر جهان پخش هستند، سرعت بارگذاری وب‌سایت شما را برای کاربران به شدت افزایش می‌دهد و همزمان، فشار را از روی سرور اصلی شما برمی‌دارد.

بیایید این مفهوم را با یک مثال ساده توضیح دهیم:

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

این راهنما به شما کمک می‌کند تا کتابخانه محلی (کش CDN) خود را به بهترین شکل مدیریت کنید.


بررسی تنظیمات کش در پنل ستون

۱. کلید اصلی: فعال یا غیرفعال کردن کش

  • کش فعال است: وقتی این گزینه روشن است، CDN فایل‌های شما را بر اساس قوانینی که در ادامه مشخص می‌کنید، ذخیره می‌کند.

  • کش غیرفعال است (Bypass): اگر این گزینه را خاموش کنید، CDN هیچ فایلی را ذخیره نمی‌کند. تمام درخواست‌ها مستقیماً به سرور اصلی شما ارسال می‌شوند. در این حالت، CDN صرفاً به عنوان یک واسطه (Proxy) عمل می‌کند.

۲. در نظر گرفتن Query String

Query String بخشی از URL است که بعد از علامت ? می‌آید (مثلاً style.css?version=1.2). توسعه‌دهندگان معمولاً از آن برای کنترل نسخه‌های مختلف یک فایل استفاده می‌کنند.

  • اگر فعال باشد: دو آدرس image.jpg?size=small و image.jpg?size=large به عنوان دو فایل کاملاً مجزا در نظر گرفته شده و هر کدام جداگانه کش می‌شوند.

  • اگر غیرفعال باشد: CDN بخش Query String را نادیده می‌گیرد. در مثال بالا، هر دو درخواست یک فایل کش‌شده را دریافت خواهند کرد. این گزینه برای زمانی مفید است که Query Stringها برای شما اهمیتی ندارند (مثلاً پارامترهای UTM تبلیغاتی) و نمی‌خواهید بیهوده نسخه‌های تکراری در کش ایجاد کنید.

۳. نحوه مدیریت کش: چه کسی تصمیم می‌گیرد؟

شما دو انتخاب اصلی برای مدیریت قوانین کش دارید:

  • استفاده از هدر Cache-Control (تصمیم‌گیری با سرور شما): در این حالت، CDN به هدرهای HTTP که سرور اصلی شما ارسال می‌کند، احترام می‌گذارد. اگر سرور شما در پاسخ خود هدر Cache-Control: max-age=3600 را ارسال کند، CDN فایل را به مدت ۳۶۰۰ ثانیه کش می‌کند. این روش برای کسانی مناسب است که کنترل دقیقی روی هدرهای خروجی وب‌سرور خود دارند. (برای اطلاعات بیشتر درباره هدرهای کش کنترل به این سند مراجعه کنید)

  • مدیریت دستی کش (تصمیم‌گیری در پنل ستون): در این حالت، شما هدرهای ارسالی از سرور اصلی را نادیده گرفته و تمام قوانین کش را مستقیماً در همین پنل تعریف می‌کنید. تنظیمات بعدی فقط در این حالت نمایش داده می‌شوند.

۴. تنظیمات دقیق در حالت مدیریت دستی

  • حالت immutable: این گزینه یک دستورالعمل قدرتمند به هدر Cache-Control اضافه می‌کند. وقتی فایلی immutable باشد، به مرورگر می‌گویید که این فایل هرگز تغییر نخواهد کرد. مرورگر دیگر حتی برای بررسی وجود نسخه جدیدتر، درخواستی ارسال نمی‌کند. این حالت برای فایل‌هایی که نامشان با هر بار تغییر عوض می‌شود (مانند app.a1b2c3d4.js) ایده‌آل است و سرعت را به شکل محسوسی افزایش می‌دهد.

  • Browser TTL (عمر کش در مرورگر): مدت زمانی (به ثانیه) که فایل باید در کش مرورگر کاربر باقی بماند. پس از این زمان، مرورگر برای دریافت فایل دوباره از CDN سؤال می‌پرسد.

  • Edge TTL (عمر کش در CDN): مدت زمانی (به ثانیه) که فایل باید در کش سرورهای CDN ستون باقی بماند. پس از این زمان، اگر درخواست جدیدی برای آن فایل بیاید، CDN برای دریافت نسخه جدیدتر به سرور اصلی شما مراجعه می‌کند. این مهم‌ترین پارامتر کش است.

  • Non-success TTL (عمر کش برای خطاها): مدت زمانی (به ثانیه) که پاسخ‌های خطا (مانند 404 Not Found یا 403 Forbidden) کش شوند. این قابلیت بسیار مفید است؛ اگر هزاران کاربر به اشتباه یک فایل ناموجود را درخواست کنند، سرور اصلی شما فقط یک بار پاسخ “404” را تولید می‌کند و CDN همان پاسخ را برای درخواست‌های بعدی از کش برمی‌گرداند و از فشار بیهوده روی سرور شما جلوگیری می‌کند.

  • Stale TTL (عمر کش منقضی شده): این یک قابلیت برای افزایش پایداری سرویس است. فرض کنید Edge TTL یک فایل تمام شده و سرور اصلی شما به کندی پاسخ می‌دهد یا در دسترس نیست. این تنظیم به CDN اجازه می‌دهد که همان نسخه قدیمی و منقضی‌شده را برای مدت کوتاهی (به ثانیه) به کاربر نشان دهد تا سرور اصلی شما دوباره در دسترس قرار گیرد. این کار بهتر از نمایش صفحه خطا به کاربر است.

۵. کش پیشرفته: ایجاد نسخه‌های متفاوت از کش

این تنظیمات به شما اجازه می‌دهند برای یک URL واحد، چندین نسخه متفاوت از محتوا را در کش ذخیره کنید.

  • در نظر گرفتن نوع دستگاه: اگر گزینه‌ی در نظر گرفتن نوع دستگاه را فعال کنید سرور CDN نوع دستگاهی که درخواست را ارسال کرده است، شناسایی می‌کند. نوع دستگاه می‌تواند تبلت (tablet)، موبایل (mobile) یا دسکتاپ (desktop) باشد. در این حالت یک هدر به نام X-Stn-Device به سمت آپ‌استريم ارسال می‌شود. در آپ‌استریم با خواندن این هدر ریکوئست می‌توانید تصمیم بگیرید که چه فایلی را مطابق با دستگاه کاربر ارائه کنید. این گزینه در حالتی مفید است که بخواهید برای دستگاه‌های مختلف فایل‌های متفاوت و عکس‌های متفاوتی را ارائه کنید. با این کار CDN وقتی پاسخ را از آپ‌استریم دریافت کند برای هر دستگاه یک کش متفاوت در نظر می‌گیرد و فایل کش جداگانه‌ای را برای آن دستگاه می‌سازد یعنی می‌تواند کش موبایل را از کش تبلت و کش دسکتاپ جدا کند.

  • داده‌ها بر اساس “کشور” کاربر کش شوند: با فعال‌سازی این گزینه، برای هر کشور یک نسخه کش جداگانه ایجاد می‌شود. این قابلیت برای وب‌سایت‌هایی که محتوای بومی‌سازی شده ارائه می‌دهند (مثلاً قیمت‌ها با واحد پول محلی یا متن به زبان‌های مختلف)، ضروری است.

ابتدا برای هرمسیر باید «نوع Cache» مشخص شود، «نوع Cache» در اینجا تعیین‌کننده‌ی رفتار کش است. در این قسمت می‌توانید یکی از سه سطح «استاندارد»، «Bypass» و یا «نادیده گرفتن Query String» را انتخاب کنید.

چه نوع محتواهایی کش می‌شوند؟

کش ستون از Content Typeهای زیر پشتیبانی می‌کند:

text/html html htm shtml;
    text/css css;
    text/xml xml;
    image/gif gif;
    image/jpeg jpeg jpg;
    application/javascript js;
    application/atom+xml atom;
    application/rss+xml rss;
 
    text/mathml mml;
    text/plain txt;
    text/vnd.sun.j2me.app-descriptor jad;
    text/vnd.wap.wml wml;
    text/x-component htc;
 
    image/png png;
    image/svg+xml svg svgz;
    image/tiff tif tiff;
    image/vnd.wap.wbmp wbmp;
    image/webp webp;
    image/x-icon ico;
    image/x-jng jng;
    image/x-ms-bmp bmp;
 
    font/woff woff;
    font/woff2 woff2;
 
    application/java-archive jar war ear;
    application/json json;
    application/mac-binhex40 hqx;
    application/msword doc;
    application/pdf pdf;
    application/postscript ps eps ai;
    application/rtf rtf;
    application/vnd.apple.mpegurl m3u8;
    application/vnd.google-earth.kml+xml kml;
    application/vnd.google-earth.kmz kmz;
    application/vnd.ms-excel xls;
    application/vnd.ms-fontobject eot;
    application/vnd.ms-powerpoint ppt;
    application/vnd.oasis.opendocument.graphics odg;
    application/vnd.oasis.opendocument.presentation odp;
    application/vnd.oasis.opendocument.spreadsheet ods;
    application/vnd.oasis.opendocument.text odt;
    application/vnd.openxmlformats-officedocument.presentationml.presentation pptx;
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx;
    application/vnd.openxmlformats-officedocument.wordprocessingml.document docx;
    application/vnd.wap.wmlc wmlc;
    application/x-7z-compressed 7z;
    application/x-cocoa cco;
    application/x-java-archive-diff jardiff;
    application/x-java-jnlp-file jnlp;
    application/x-makeself run;
    application/x-perl pl pm;
    application/x-pilot prc pdb;
    application/x-rar-compressed rar;
    application/x-redhat-package-manager rpm;
    application/x-sea sea;
    application/x-shockwave-flash swf;
    application/x-stuffit sit;
    application/x-tcl tcl tk;
    application/x-x509-ca-cert der pem crt;
    application/x-xpinstall xpi;
    application/xhtml+xml xhtml;
    application/xspf+xml xspf;
    application/zip zip;
 
    application/octet-stream bin exe dll;
    application/octet-stream deb;
    application/octet-stream dmg;
    application/octet-stream iso img;
    application/octet-stream msi msp msm;
 
    audio/midi mid midi kar;
    audio/mpeg mp3;
    audio/ogg ogg;
    audio/x-m4a m4a;
    audio/x-realaudio ra;
 
    video/3gpp 3gpp 3gp;
    video/mp2t ts;
    video/mp4 mp4;
    video/mpeg mpeg mpg;
    video/quicktime mov;
    video/webm webm;
    video/x-flv flv;
    video/x-m4v m4v;
    video/x-mng mng;
    video/x-ms-asf asx asf;
    video/x-ms-wmv wmv;
    video/x-msvideo avi;