درک حافظه پنهان 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 هنوز هم باید تصمیم بگیرد که آیا آن را ذخیره می کند یا خیر. برای این ، آن به شدت به عناوین کنترل حافظه نهان احترام می گذاردبشر به عبارت دیگر ، تصمیم حافظه پنهان / نه نه بر اساس اطلاعات زیر است:
-
در
Cache-Control
وتExpires
عناوین -
کد وضعیت مبدا
از مستندات موزیلا:
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 خود نیاز دارد. چه می شود اگر من به شما بگویم فقط به یک قانون عمومی کوچک و کوچک در مکان مناسب نیاز دارد؟
در واقع ، با فرض اینکه برنامه شما برای بازگشت هدرهای مربوط به حافظه پنهان تنظیم شده است ، جادو به یکی از دو شکل می آید:
- یا جدید ایجاد کنید قاعده صفحه تطبیق
*
و تنظیمCache-Level: Cache Everything
- یا از a استفاده کنید قاعده حافظه نهان با عملکرد مشابه:
(اکنون قوانین حافظه پنهان نسبت به قوانین صفحه ترجیح داده می شود).
ممکن است عجیب به نظر برسد (به خصوص قانون صفحه) ، اما این کار خواهد بود همه منابع را به ذخیره سازی ارتقا دهید (با نام واجد شرایط برای حافظه پنهان). اگر پیگیری کرده اید ، می دانید که این مرحله در مرحله بعدی فرآیند تأثیر نمی گذارد: CloudFlare هنوز از عناوین کنترل حافظه نهان و کد وضعیت استفاده می کند تا تصمیم نهایی حافظه پنهان را انجام دهد.
به عبارت دیگر ، صفحات سرپرست شما (با یک مناسب Cache-Control: private, no-store, no-cache
) و صفحات با یک کوکی جلسه ذخیره نمی شوند ، اما اکنون صفحه اصلی HTML شما (با یک مناسب Cache-Control: public, max-age=3600
) اراده!
پس از اتمام این قانون ، تعداد آنها DYNAMIC
صفحات (غیرقابل دسترسی) به شدت کاهش می یابد. شما هنوز هم ممکن است نیاز به تنظیم دقیق رفتارها داشته باشید ، اما حداقل این یک پایه مناسب برای کار با آن فراهم می کند.
من در ابتدا با رفتار ذخیره سازی Cloudflare اشتباه گرفته شدم ، به خصوص هنگامی که صفحات HTML وضعیت حافظه نهان پویا را برگرداند. این مستندات گسترده اما پرتحرک است و من چند ساعت را روی آن گذراندم و سعی کردم آن را کشف کنم. اصلاح این مقاله به روشن شدن همه چیز در ذهن من کمک کرده است.
قانون به اشتراک گذاشته شده در بخش آخر چیزی است که ما در تولید از آن استفاده می کنیم. بدون آن ، دستاوردهای حافظه نهان به مراتب کمتر ملموس خواهد بود.
من فقط می توانم امیدوارم که این به شما نیز کمک کند. دریغ نکنید که مانند یا نظر خود را رها کنید ، واکنش های شما همیشه باعث لبخند من می شود.