محتوای برنامه کش

Cloud CDN بخش مهمی از پشتیبانی App Hosting از برنامه وب شما است. هر درخواست به باطن شما ابتدا از طریق Cloud CDN انجام می شود. محتوایی که قبلاً در CDN ذخیره شده است، بلافاصله به کاربر بازگردانده می‌شود و از سفر به سرویس Cloud Run که کد سرور برنامه وب شما را اجرا می‌کند صرفنظر می‌کند. می‌توانید در web.dev درباره مزایای کلی CDN اطلاعات بیشتری کسب کنید.

اگرچه پیکربندی اصلی Cloud CDN توسط App Hosting تنظیم شده است و نمی توان آن را تغییر داد، تعدادی از کارها وجود دارد که می توانید برای بهینه سازی حافظه پنهان خود به منظور افزایش سرعت بارگذاری صفحه، کاهش صورتحساب محتوای ذخیره نشده و به حداقل رساندن ترافیک به Cloud Run انجام دهید.

محتوای کش

اگر همه شرایط زیر درست باشد، CDN ابر پاسخ‌ها را در حافظه پنهان ذخیره می‌کند:

  1. درخواست GET است

  2. پاسخ دارای کد وضعیت 200 ، 203 ، 204 ، 206 ، 300 ، 301 ، 302 ، 307 ، 308 ، 404 ، 405 ، 410 ، 421 ، 451 ، یا 501 است.

  3. پاسخ دارای یک هدر Cache-Control با دستور max-age یا s-maxage یا یک سرصفحه Expires با مهر زمانی در آینده است.

  4. پاسخ دارای هدر Age یا هدر Cache-Control با دستور public صریح است.

  5. اندازه پاسخ کمتر یا مساوی 10 مگابایت است.

و هیچ یک از موارد زیر درست نیست:

  1. پاسخ دارای هدر Set-Cookie است

  2. پاسخ دارای هدر 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 .

  3. پاسخ دارای هدر Cache-Control با دستور no-store یا private .

  4. درخواست دارای یک هدر Cache-Control با دستور no-store .

  5. درخواست دارای سرصفحه 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 ، بایت‌های ذخیره‌سازی شده و ذخیره‌نشده را نشان می‌دهد و برای هر عرضه یک علامت دارد. می‌توانید از این نمودار برای اندازه‌گیری اثربخشی تلاش‌های بهینه‌سازی حافظه پنهان استفاده کنید.