مطالعات موردی
مطالعه موردی: چیدمان هدرهای کش یک سایت خبری
یک سایت خبری ورزشی ترکیهای با ترافیک بالا، کش را نه از پنل بلکه از سرور اصلی (origin) خودش مدیریت میکند. چهار لایه محتوا، چهار Cache-Control متفاوت، همگی از بیرون قابل بررسی.
بازگشت به راهنمای پلتفرمهدرهای پاسخ واقعی یک حساب زنده، و اینکه چرا هر کدام همینطور انتخاب شدهاند. نام مشتری ذکر نمیشود؛ هر هدری که اینجا آمده طوری نوشته شده که بتوانید با اجرای همان دستور روی سایت خودتان آن را بررسی کنید.
چهار لایه، چهار مدت متفاوت
یک مدت کش واحد برای سایت خبری کافی نیست: صفحه اصلی هر دقیقه تغییر میکند، لوگو سالها تغییر نمیکند. این حساب محتوا را بر اساس سرعت تغییرش جدا کرده است.
| محتوا | هدر ارسالی از origin | دلیل |
|---|---|---|
| صفحه اصلی | public, max-age=30, s-maxage=30, stale-while-revalidate=60 |
اخبار فوری هر 30 ثانیه تازه میشود؛ وقتی مدت تمام شود بازدیدکننده نباید منتظر بماند — edge نسخه قدیمی را نشان میدهد و همزمان در پسزمینه آن را تازه میکند. |
| صفحات بخش و لیستها | public, max-age=300, s-maxage=300, stale-while-revalidate=600 |
صفحات دستهبندی به اندازه صفحه اصلی مرتب تغییر نمیکنند. پنج دقیقه تأخیری نیست که تیم تحریریه متوجهش شود، و بار روی edge را بهطور محسوسی کاهش میدهد. |
| فایل استاتیک نسخهدار | public, max-age=31536000, s-maxage=31536000, immutable |
نام فایل نسخه را در خود دارد، پس محتوایش هرگز تغییر نمیکند. immutable حتی پیش از پایان max-age هم مانع پرسش دوباره مرورگر میشود. |
| تصویر بهینهشده | max-age=31536000 + public در سطری جدا |
این خط را edge مینویسد نه origin — وقتی Image Optimization روی یک قاعده روشن باشد، هدر بیقیدوشرط دوباره ساخته میشود. |
برپاکردن همین چیدمان روی سایت خودتان
محتوا را بر اساس سرعت تغییرش جدا کنید
اول تصمیم بگیرید کدام مسیر با چه سرعتی تغییر میکند، نه مدتها را — مدت نتیجه همین تصمیم است.
- در حد چند دقیقه تغییر میکند: صفحه اصلی، نتیجه زنده، فید اخبار فوری
- در حد چند ساعت تغییر میکند: صفحات دستهبندی، لیستهای آرشیو
- هرگز تغییر نمیکند: CSS، JS، فونت، لوگو — هر چیزی که نام فایلش نسخه دارد
- شخصی است: صفحات واردشده به حساب کاربری، سبد خرید، حساب کاربری — اینها کش نمیشوند و نباید بشوند
هدرها را از origin خودتان منتشر کنید
هدر را برنامه یا وبسرور شما ارسال میکند. نیازی نیست در پنل مدتی وارد کنید؛ این دو روش در یک قاعده با هم کار نمیکنند.
- s-maxage برای کش مشترک (یعنی CDN) است، max-age برای مرورگر؛ میتوانید مقادیر متفاوتی به آنها بدهید
- stale-while-revalidate باعث میشود بازدیدکننده هنگام پایان مدت منتظر نماند — نسخه قدیمی نشان داده میشود و نسخه تازه در پسزمینه گرفته میشود
- immutable فقط باید وقتی داده شود که نام فایل نسخهدار باشد؛ روی فایل بدون نسخه، مرورگر تا یک سال با نسخه قدیمی میماند
بگذارید قاعده از origin پیروی کند
در Delivery Rules، در قاعده همان مسیر باید **Use browser cache time** روشن باشد و **Cache Expire Time** خالی بماند.
- اگر مدتی وارد کنید، هدرهای origin در آن قاعده نادیده گرفته میشوند و هدر ارسالی به مرورگر هم بازنویسی میشود
- میتوانید قاعدهها را بر اساس مسیر جدا کنید: یک قاعده برای فایلهای استاتیک، قاعدهای دیگر برای صفحات
بسنجید، سپس گسترش دهید
اول روی یک مسیر امتحان کنید. وقتی دیدید هدر موردانتظار برمیگردد و HIT میگیرید، سراغ لایههای دیگر بروید.
چطور مطمئن شوید درست کار میکند
همهچیز در هدرهای پاسخ دیده میشود؛ نیازی به نگاهکردن به پنل نیست. همان URL را دوبار درخواست کنید:
curl -sI https://site-shoma.ir/safhe | grep -iE "cache-control|x-proxy-cache-mt"
- دیدن X-Proxy-Cache-MT: MISS در اولین درخواست طبیعی است — محتوا همان لحظه در حال کششدن است. درخواست دوم باید HIT برگرداند.
- STALE خطا نیست: یعنی stale-while-revalidate دارد کار خودش را میکند — نسخه قدیمی به بازدیدکننده داده میشود درحالیکه نسخه تازه در پسزمینه گرفته میشود.
- اگر BYPASS میبینید، تقریباً قطعاً وارد سایت شدهاید؛ کوکی نشست عمداً کش را دور میزند. در یک پنجره ناشناس دوباره امتحان کنید.
- اگر Cache-Control برگشتی با چیزی که فرستادهاید فرق دارد، یعنی در آن قاعده مدتی ثابت وارد شده است.
- اگر میخواهید ببینید origin چه چیزی میفرستد، هدرهای تشخیصی origin را در قاعده روشن کنید؛ X-Upstream-CacheControl نشان میدهد origin چه گفته، Cache-Control نشان میدهد بازدیدکننده چه میبیند.
سه چیزی که هدر درست را بیفایده میکند
- پاسخی که
Set-Cookieمیفرستد هرگز کش نمیشود. مهم نیستCache-Controlچقدر درست باشد. این رایجترین دلیلی است که کش اصلاً گرم نمیشود: برنامه در هر درخواست یک کوکی نشست میگذارد. - وقتی
Image Optimizationروی یک قاعده روشن باشد، تصاویر 365 روز نگه داشته میشوند و هدر origin نادیده گرفته میشود. اگر میخواهید خودتان تصاویر را مدیریت کنید، این تنظیم را در آن قاعده خاموش کنید. - به فایل بدون نسخه
immutableندهید. اگر نام فایل تغییر نکند، مرورگر یک سال نسخه قدیمی را نگه میدارد و purge کردن CDN این را درست نمیکند — purge فقط edge را پاک میکند، نه دیسک بازدیدکننده را.
ادامه
- راهنمای Cache-Control و max-age — هر دستور چه میکند
- سازنده هدر Cache-Control — دستورها را انتخاب کنید و هدر را بسازید
- چطور کش CDN را پاک کنیم — کی purge لازم است و کی نیست