שמירת תוכן האפליקציה במטמון

Cloud CDN הוא חלק קריטי בתמיכה של App Hosting באפליקציית האינטרנט שלכם. כל בקשה לקצה העורפי עוברת תחילה דרך Cloud CDN. תוכן שכבר נמצא במטמון ב-CDN יוצג מיד למשתמש, בלי לעבור דרך שירות Cloud Run שבו פועל קוד השרת של אפליקציית האינטרנט. מידע נוסף על היתרונות הכלליים של רשתות CDN זמין ב-web.dev.

ההגדרה הבסיסית של Cloud CDN מוגדרת על ידי App Hosting ואי אפשר לשנות אותה, אבל יש כמה דברים שאפשר לעשות כדי לבצע אופטימיזציה של שמירת התוכן במטמון כדי להגדיל את מהירות טעינת הדפים, לצמצם את החיוב על תוכן שלא נשמר במטמון ולמזער את התנועה אל Cloud Run.

תוכן שאפשר לשמור במטמון

Cloud 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. גודל התגובה הוא עד 10MB.

ואף אחד מהתנאים הבאים לא מתקיים:

  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

ב-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 לא רלוונטי ההנחיה הזו לא נדרשת כדי שאפשר יהיה לשמור את התוכן במטמון, אבל מומלץ לכלול אותה בתוכן ששרתים proxy צריכים לשמור במטמון.
private לא רלוונטי Cloud CDN לא שומר במטמון תגובה עם ההנחיה private, גם אם התגובה נחשבת אחרת כמתאימה לשמירה במטמון. לקוחות (כמו דפדפנים) עדיין עשויים לשמור את התוצאה במטמון. משתמשים ב-no-store כדי למנוע שמירת תשובות במטמון.
max-age=SECONDS המערכת מתעלמת מההוראה max-age. תגובה שנשמרה במטמון תוחזר כאילו הכותרת הזו לא נכללה בבקשה. תגובה עם ההוראה max-age מאוחסנת במטמון למשך SECONDS שהוגדר.
s-maxage=SECONDS לא רלוונטי תגובה עם ההוראה s-maxage מאוחסנת במטמון למשך SECONDS שהוגדר. אם גם max-age וגם s-maxage נמצאים, Cloud CDN משתמש ב-s‑maxage. תשובות עם ההנחיה הזו לא מוצגות כ'לא עדכניות'. s-max-age (שני מקפים) לא תקף למטרות אחסון במטמון.
max-stale=SECONDS הוראה הבקשה max-stale קובעת את הזמן שבו המידע לא עדכני (בשניות) שהלקוח מוכן לקבל. Cloud CDN מתייחס לכך ומחזיר תגובה לא עדכנית שנשמרה במטמון רק אם זמן האחסון במטמון של התגובה קטן מההוראה max-stale. אחרת, הוא מבצע אימות מחדש לפני שהוא מעביר את הבקשה. לא רלוונטי
stale-while-revalidate=SECONDS לא רלוונטי התגובה עם stale-while-revalidate מוצגת ללקוח למשך עד SECONDS בזמן שהאימות מחדש מתבצע באופן אסינכרוני.
must-revalidate לא רלוונטי תגובה עם must-revalidate עוברת אימות מחדש עם שרת המקור אחרי שתוקפה פג. תשובות עם ההנחיה הזו לא מוצגות כ'לא עדכניות'.
proxy-revalidate תגובה עם proxy-revalidate עוברת אימות מחדש עם שרת המקור אחרי שתוקפה פג. תשובות עם ההנחיה הזו לא מוצגות כ'לא עדכניות'.
no-transform לא רלוונטי Cloud CDN לא מחיל טרנספורמציות.

מדידת תנועה שנשמרה במטמון ותנועה שלא נשמרה במטמון

בתרשים 'Cloud CDN – Outgoing Bandwidth' בכרטיסייה Usage במסוף App Hosting מוצגים הבייטים שסופקו מהמטמון ומחוץ למטמון, ויש סימון לכל השקות. אפשר להשתמש בתרשים הזה כדי למדוד את היעילות של המאמצים שלכם לאופטימיזציה של המטמון.