برنامه نویسی

درک حافظه پنهان Cloudflare: چه چیزی ذخیره می شود و چگونه می توان آن را کنترل کرد

من قبلاً فکر می کردم که CloudFlare Caching فقط از جعبه کار کرده است – وب سایت خود را در پشت Cloudflare و Boom تنظیم کنید! صفحات HTML و رسانه های شما ذخیره شده ، عملکرد افزایش می یابد و رئیس شما خوشحال است.

خوب … نه کاملاً. Cloudflare ابزاری عالی است ، اما برای استفاده واقعی از آن ، باید وقت خود را برای درک نحوه عملکرد آن اختصاص دهید. به خصوص ، ممکن است شما مجبور شوید یک قانون تا حدودی ضد شهود را تنظیم کنید. کنجکاو؟ بیایید آن را بشکنیم!

قبل از شروع ℹ این مقاله به مراتب کامل نیست ، من نمی توانم تمام ظرافت های حافظه پنهان Cloudflare را بدون از دست دادن مخاطبان (و خودم) بپوشانم. در عوض ، من بر روی مفاهیم و تنظیمات کلیدی تمرکز خواهم کرد ، با فرض اینکه شما می دانید چگونه می توانید برنامه ای را در پشت CloudFlare تنظیم کنید.


در این مقاله:


وضعیت حافظه پنهان CloudFlare

اول ، بیایید هدر و ابزارهای Cloudflare را به ما درک کنیم تا درک کنیم که صفحات ما چگونه ذخیره می شوند (یا نه). وقتی یک صفحه از طریق Cloudflare سرو می شود ، برخی از آنها را اضافه می کند Cf-* هدرهای حافظه نهان.

مهمترین مورد این است Cf-Cache-Status، که می تواند مقادیر زیر را بدست آورد:

  • HIT content محتوای ذخیره شده ، از حافظه نهان سرو می شود.

  • MISS content محتوای قابل ذخیره ، هرگز ذخیره نشده (یا حداقل در حافظه نهان در زمان درخواست). از مبدا خدمت کرده است.

  • EXPIRED content محتوای قابل ذخیره ، در حافظه نهان بود اما TTL منقضی شده است. از مبدا خدمت کرده است.

  • BYPASS content محتوای ذخیره شده ، به دلیل دستورالعمل ، کوکی و غیره ذخیره نشده است …

  • DYNAMIC content محتوای غیرقابل دسترسی

بنابراین ، منابع (یا URL) در آن سازماندهی می شوند قابل ذخیره وت غیر قابل دستیابی دارایی منابع قابل ذخیره بسته به وضعیت حافظه نهان CloudFlare و سایر تنظیمات مانند TTL ، کوکی ها و غیره دارای وضعیت ظریف تر هستند.

(یکی دیگر از هدر مفید است Cf-Ray، که یک شناسه منحصر به فرد از این درخواست است. برای کسب اطلاعات بیشتر در مورد درخواست می توانید از این شناسه در کنسول CloudFlare استفاده کنید)


“منبع” چیست

👉 به طور پیش فرض ، CloudFlare URL ها را با پارامترهای مختلف پرس و جو به عنوان صفحات مختلف در نظر می گیرد.

در بخش قبلی ، ما در مورد آن صحبت کردیم منابع و اشاره کردند که آنها به URL ها نقشه برداری کردند. برای روشن شدن ، تعریف یک منبع بستگی به آن دارد سطح حافظه نهان از منطقه Cloudflare شما. سطح حافظه نهان می تواند باشد:

  • پایه، بدون رشته پرس و جو → فقط حافظه پنهان وقتی URL رشته پرس و جو ندارد

    • derlin.ch/main ذخیره شده است ، derlin.ch/main?foo=bar نیست
  • ساده، رشته های پرس و جو را نادیده بگیرید → بدون توجه به رشته های پرس و جو ، همان منبع را تحویل دهید

    • derlin.ch/main?ignore=this ذخیره شده و همان منبع است derlin.ch/main
  • استاندارد، تهاجمی → متفاوت را ارائه دهید منبع با هر رشته پرس و جو منحصر به فرد

    • derlin.ch/main?foo=barبا derlin.ch/main وت derlin.ch/main?foo=bar&x=1 همه منابع جداگانه ذخیره شده به طور جداگانه هستند

سطح حافظه نهان است استاندارد به طور پیش فرض ، به معنای یک منبع CloudFlare 1-1 به URL نقشه می کند.


کدام منابع واجد شرایط برای حافظه پنهان هستند

👉 منابع واجد شرایط برای حافظه نهان باید با یک پسوند سفید رنگ به پایان برسند. JSON و HTML ذخیره نمی شوند.

چه چیزی باعث می شود منبع واجد شرایط برای حافظه پنهان باشد؟

بیایید بگوییم که وب سایت نمونه کارها خود را در پشت CloudFlare دارید. شما انتظار صفحه اصلی خود را دارید ، به عنوان مثال https://derlin.ch، برای ذخیره خودکار ، درست است؟ نه

CloudFlare فقط ذخیره شده بر اساس پسوند پرونده و نه از نظر نوع MIME.

Cloudflare CDN به طور پیش فرض HTML یا JSON را ذخیره نمی کندبشر

وقتی می گوییم گسترش، ما در مورد آخرین بیت URL صحبت می کنیم (فکر کنید پسوند پرونده). در Content-Type هدر (نوع MIME) هرگز در نظر گرفته نمی شود. علاوه بر این ، CloudFlare لیستی از پسوندهای پیش فرض پرونده ذخیره شده را دارد (.jpgبا .cssبا .js، …) ، و URL هایی که بخشی از این لیست نیستند در واقع غیرقابل دسترسی

برای درک بهتر:

  • derlin.ch/data/cv.pdf قابل ذخیره است (.pdf بخشی از لیست است)

  • derlin.ch/github-logo.png قابل ذخیره است (.png بخشی از لیست است)

  • derlin.ch/index.html است ، نه قابل ذخیره (.html بخشی از لیست نیست)

  • derlin.ch یا derlin.ch/main است ، نه Cacheble (بدون پسوند)


که منابع واجد شرایط ذخیره می شوند

👉 Cloudflare به شدت به عنوان های کنترل حافظه نهان که توسط منشأ برگشته اند ، احترام می گذارد.

هنگامی که یک منبع واجد شرایط برای حافظه پنهان (CACHEABLE) باشد ، CloudFlare هنوز هم باید تصمیم بگیرد که آیا آن را ذخیره می کند یا خیر. برای این ، آن به شدت به عناوین کنترل حافظه نهان احترام می گذاردبشر به عبارت دیگر ، تصمیم حافظه پنهان / نه نه بر اساس اطلاعات زیر است:

  1. در Cache-Control وت Expiresعناوین

  2. کد وضعیت مبدا

از مستندات موزیلا:

HTTP Cache-Control نگه داشتن راهنما .

HTTP Expires هدر پاسخ حاوی تاریخ/زمان است که پس از آن پاسخ در متن ذخیره سازی HTTP منقضی می شود.

بیشتر چارچوب های وب این روزها با دستورالعمل های کنترل حافظه نهان از پیش تنظیم شده ارائه می شوند. اگر برنامه شما آنها را ندارد ، شما باید کاری انجام دهید!


هشدار سریع

من باید اسناد را در این مورد استناد کنم ، فقط به این دلیل که عاشق “هستماین یک گزینه است ، اما شما نمی توانید در مورد آن در واقع در تمام سطوح اشتراک انجام دهید“😂:

هنگامی که در وب سایت مشتری یک شرکت فعال می شود ، نشان می دهد که CloudFlare باید به شدت احترام بگذارد Cache-Control بخشنامه های دریافت شده از سرور Origin. مشتریان رایگان ، حرفه ای و تجاری این را دارند گزینه به طور پیش فرض فعال شده است و نمی تواند آن را غیرفعال کند.

قوانین حافظه پنهان CloudFlare به کاربران امکان می دهد سرور Origin را تقویت یا نادیده بگیرند Cache-Control هدرها یا خط مشی های پیش فرض تعیین شده توسط CloudFlare.


CloudFlare هنگام واکشی یک منبع از مبدا ، به پاسخ نگاه می کند و رفتار حافظه پنهان پیش فرض زیر را اعمال می کند:

  • ابری از کار اگر یکی از موارد زیر صحیح است ، منبع را ذخیره کنید:

    • در Cache-Control هدر تنظیم شده است public وت max-age بیشتر از 0 است
    • در Expires هدر در تاریخ آینده تنظیم شده است

      (اگر هر دو max-age و Expires هدر موجود است ، از Cloudflare استفاده می کند max-age)

  • ابری نمی کند اگر یکی از موارد زیر صحیح است ، منبع را ذخیره کنید:

    • در Cache-Control هدر تنظیم شده است privateبا no-storeبا no-cache، یا max-age=0
    • هدر مجموعه ای وجود دارد.
    • روش درخواست HTTP چیزی غیر از یک است GETبشر

اگر وجود ندارد Cache-Control یا Expires، پاسخهای ذخیره شده CloudFlare (با TTL متنوع) فقط درصورتی که کد وضعیت مبدا یکی باشد 200با 206با 301-303با 404 وت 410بشر

به عبارت دیگر:

  • تمام منابع دارای پسوند قابل ذخیره سازی ذخیره می شوند مگر اینکه شما هدرهایی داشته باشید که در غیر این صورت CloudFlare را بیان می کنند

  • تغییر مسیر و 404 ذخیره می شود

  • خطاهایی مانند 500 ذخیره نمی شوند

(یادداشت: تنظیمات منطقه شما ممکن است این رفتار را نادیده بگیرد ، و مشخصات دیگری نیز وجود دارد که من آن را پوشش نداده ام – به عنوان مثال اندازه اندازه ذخیره ، Set-Cookie رسیدگی و موارد دیگر. وقتی شک دارید ، همیشه به مستندات رسمی مراجعه کنید.)


چگونه می توان منابع ذخیره شده را به HTML (و دیگران) گسترش داد

شما تاکنون درک کرده اید که بیشتر صفحات تشکیل دهنده وب سایت شما (HTML ، JSON ، …) حتی برای ذخیره سازی در نظر گرفته نمی شوند – حتی اگر احتمالاً از آن بهره مند شوند!

ممکن است شما اعتقاد داشته باشید که تغییر این رفتار مشکل است و به دانش عمیقی از صفحات و Cloudflare خود نیاز دارد. چه می شود اگر من به شما بگویم فقط به یک قانون عمومی کوچک و کوچک در مکان مناسب نیاز دارد؟

در واقع ، با فرض اینکه برنامه شما برای بازگشت هدرهای مربوط به حافظه پنهان تنظیم شده است ، جادو به یکی از دو شکل می آید:

  1. یا جدید ایجاد کنید قاعده صفحه تطبیق * و تنظیم Cache-Level: Cache Everything

صفحه قانون همه چیز را ذخیره می کند

  1. یا از a استفاده کنید قاعده حافظه نهان با عملکرد مشابه:

حافظه پنهان همه چیز را ذخیره کنید

(اکنون قوانین حافظه پنهان نسبت به قوانین صفحه ترجیح داده می شود).

ممکن است عجیب به نظر برسد (به خصوص قانون صفحه) ، اما این کار خواهد بود همه منابع را به ذخیره سازی ارتقا دهید (با نام واجد شرایط برای حافظه پنهان). اگر پیگیری کرده اید ، می دانید که این مرحله در مرحله بعدی فرآیند تأثیر نمی گذارد: CloudFlare هنوز از عناوین کنترل حافظه نهان و کد وضعیت استفاده می کند تا تصمیم نهایی حافظه پنهان را انجام دهد.

به عبارت دیگر ، صفحات سرپرست شما (با یک مناسب Cache-Control: private, no-store, no-cache) و صفحات با یک کوکی جلسه ذخیره نمی شوند ، اما اکنون صفحه اصلی HTML شما (با یک مناسب Cache-Control: public, max-age=3600) اراده!

پس از اتمام این قانون ، تعداد آنها DYNAMIC صفحات (غیرقابل دسترسی) به شدت کاهش می یابد. شما هنوز هم ممکن است نیاز به تنظیم دقیق رفتارها داشته باشید ، اما حداقل این یک پایه مناسب برای کار با آن فراهم می کند.


من در ابتدا با رفتار ذخیره سازی Cloudflare اشتباه گرفته شدم ، به خصوص هنگامی که صفحات HTML وضعیت حافظه نهان پویا را برگرداند. این مستندات گسترده اما پرتحرک است و من چند ساعت را روی آن گذراندم و سعی کردم آن را کشف کنم. اصلاح این مقاله به روشن شدن همه چیز در ذهن من کمک کرده است.

قانون به اشتراک گذاشته شده در بخش آخر چیزی است که ما در تولید از آن استفاده می کنیم. بدون آن ، دستاوردهای حافظه نهان به مراتب کمتر ملموس خواهد بود.

من فقط می توانم امیدوارم که این به شما نیز کمک کند. دریغ نکنید که مانند یا نظر خود را رها کنید ، واکنش های شما همیشه باعث لبخند من می شود.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا