Cloud CDN بخش مهمی از پشتیبانی App Hosting از برنامه وب شما است. هر درخواست به باطن شما ابتدا از طریق Cloud CDN انجام می شود. محتوایی که قبلاً در CDN ذخیره شده است، بلافاصله به کاربر بازگردانده میشود و از سفر به سرویس Cloud Run که کد سرور برنامه وب شما را اجرا میکند صرفنظر میکند. میتوانید در web.dev درباره مزایای کلی CDN اطلاعات بیشتری کسب کنید.
اگرچه پیکربندی اصلی Cloud CDN توسط App Hosting تنظیم شده است و نمی توان آن را تغییر داد، تعدادی از کارها وجود دارد که می توانید برای بهینه سازی حافظه پنهان خود به منظور افزایش سرعت بارگذاری صفحه، کاهش صورتحساب محتوای ذخیره نشده و به حداقل رساندن ترافیک به Cloud Run انجام دهید.
محتوای کش
اگر همه شرایط زیر درست باشد، CDN ابر پاسخها را در حافظه پنهان ذخیره میکند:
درخواست GET است
پاسخ دارای کد وضعیت
200
،203
،204
،206
،300
،301
،302
،307
،308
،404
،405
،410
،421
،451
، یا501
است.پاسخ دارای یک هدر
Cache-Control
با دستورmax-age
یاs-maxage
یا یک سرصفحهExpires
با مهر زمانی در آینده است.پاسخ دارای هدر
Age
یا هدرCache-Control
با دستورpublic
صریح است.اندازه پاسخ کمتر یا مساوی 10 مگابایت است.
و هیچ یک از موارد زیر درست نیست:
پاسخ دارای هدر
Set-Cookie
استپاسخ دارای هدر
Vary
با مقداری غیر ازAccept
،Accept-Encoding
،Access-Control-Request-Headers
،Access-Control-Request-Method
،Origin
،Sec-Fetch-Dest
،Sec-Fetch-Mode
،Sec-Fetch-Site
X-Goog-Allowed-Resources
X-Origin
RSC
،Next-Router-State-Tree
،Next-Router-Prefetch
، یاNext-Router-Segment-Prefetch
.پاسخ دارای هدر
Cache-Control
با دستورno-store
یاprivate
.درخواست دارای یک هدر
Cache-Control
با دستورno-store
.درخواست دارای سرصفحه
Authorization
است، مگر اینکه پاسخ دارای دستورالعمل کنترل حافظه پنهان صریح باشد.
رفتار را با دستورات کنترل حافظه پنهان سفارشی کنید
Next.js
Next.js دستورات کنترل کش را بطور ضمنی بر اساس تعدادی فاکتور تنظیم می کند. با این حال، میتوانید با تنظیم دستی هدر در فایل next.config.js
، این موارد را لغو کنید. به عنوان مثال، برای اطمینان از اینکه یک صفحه در Cloud CDN ذخیره نمی شود:
/** @type {import('next').NextConfig} */
const nextConfig = {
headers: async () => [{
source: "/YOUR_PRIVATE_PAGE",
headers: [{
key: "Cache-Control",
value: "private"
}],
}],
};
زاویه ای
Angular SSR دستورالعملهای صریح کنترل حافظه پنهان را خارج از جعبه تنظیم نمیکند. میتوانید با تعیین سرصفحههای کنترل حافظه پنهان در مسیرهای سرور خود، هدرهای خود را اضافه کنید. به عنوان مثال، برای اینکه به Cloud CDN اجازه دهید تمام صفحات را به مدت یک ساعت کش کند:
import { RenderMode, ServerRoute } from '@angular/ssr';
export const serverRoutes: ServerRoute[] = [
{
path: '**',
renderMode: RenderMode.Prerender,
headers: {
'Cache-Control': 'public, max-age=3600',
}
}
];
یا برای اطمینان از اینکه یک صفحه خاص ذخیره نمی شود:
import { RenderMode, ServerRoute } from '@angular/ssr';
export const serverRoutes: ServerRoute[] = [
// ... other routes
{
path: 'YOUR_PRIVATE_PAGE',
renderMode: RenderMode.Server,
headers: {
'Cache-Control': 'private',
}
}
];
بخشنامه های محترم
نمونه Cloud CDN Firebase App Hosting دستورالعملهای کنترل کش زیر را رعایت میکند:
بخشنامه | درخواست کنید | پاسخ |
---|---|---|
no-store | هنگامی که در یک درخواست وجود دارد، پاسخ در حافظه پنهان ذخیره نمی شود. | پاسخ با no-store ذخیره نمی شود. |
no-cache | دستورالعمل درخواست no-cache پنهان نادیده گرفته می شود تا از شروع بالقوه یا وادار کردن اعتبار مجدد به مبدأ توسط مشتریان جلوگیری شود. | پاسخ no-cache ذخیره میشود، اما قبل از ارائه باید با مبدا تأیید شود. |
public | N/A | این دستورالعمل برای قابلیت ذخیره سازی در حافظه پنهان الزامی نیست، اما بهترین روش برای محتوایی است که باید توسط پراکسی ها ذخیره شود. |
private | N/A | پاسخ با دستور private توسط Cloud CDN ذخیره نمی شود، حتی اگر پاسخ در غیر این صورت قابل ذخیره سازی در نظر گرفته شود. کلاینت ها (مانند مرورگرها) ممکن است همچنان نتیجه را در حافظه پنهان نگه دارند. no-store برای جلوگیری از تمام پاسخ ها در حافظه پنهان استفاده کنید. |
max-age=SECONDS | دستورالعمل درخواست max-age نادیده گرفته می شود. یک پاسخ ذخیره شده در حافظه پنهان بازگردانده می شود به گونه ای که گویی این هدر در درخواست گنجانده نشده است. | یک پاسخ با دستورالعمل max-age تا ثانیه های تعریف شده در حافظه پنهان ذخیره می شود. |
s-maxage=SECONDS | N/A | یک پاسخ با دستورالعمل s-maxage تا ثانیه های تعریف شده در حافظه پنهان ذخیره می شود. اگر max-age و s-maxage وجود داشته باشند، s‑maxage توسط Cloud CDN استفاده می شود. پاسخهای مربوط به این دستورالعمل کهنه نشده است. s-max-age (دو خط تیره) برای اهداف ذخیره سازی معتبر نیست. |
max-stale=SECONDS | دستورالعمل درخواست max-stale حداکثر بیات بودن (در ثانیه) را که مشتری مایل به پذیرش آن است را دیکته می کند. Cloud CDN این مورد را رعایت میکند و تنها در صورتی که کهنگی پاسخ کمتر از دستورالعمل max-stale باشد، یک پاسخ ذخیرهشده قدیمی را برمیگرداند. در غیر این صورت، قبل از ارائه درخواست مجدداً تأیید می شود. | N/A |
stale-while-revalidate=SECONDS | N/A | یک پاسخ با stale-while-revalidate به مشتری حداکثر تا SECONDS ارائه می شود در حالی که اعتبارسنجی مجدد به صورت ناهمزمان انجام می شود. |
must-revalidate | N/A | یک پاسخ با must-revalidate باید پس از انقضا با سرور مبدا تأیید مجدد می شود. پاسخهای مربوط به این دستورالعمل کهنه نشده است. |
proxy-revalidate | یک پاسخ با proxy-revalidate پس از انقضا با سرور مبدا تأیید مجدد می شود. پاسخهای مربوط به این دستورالعمل کهنه نشده است. | |
no-transform | N/A | هیچ تبدیلی توسط Cloud CDN اعمال نمی شود. |
ترافیک ذخیره شده و ذخیره نشده را اندازه گیری کنید
نمودار «Cloud CDN - Outgoing Width» در برگه Usage کنسول App Hosting ، بایتهای ذخیرهسازی شده و ذخیرهنشده را نشان میدهد و برای هر عرضه یک علامت دارد. میتوانید از این نمودار برای اندازهگیری اثربخشی تلاشهای بهینهسازی حافظه پنهان استفاده کنید.