Cloud CDN הוא חלק חשוב בתמיכה של App Hosting באפליקציית האינטרנט שלכם. כל בקשה לשרת העורפי עוברת קודם דרך Cloud CDN. תוכן שכבר נמצא במטמון ב-CDN מוחזר מיד למשתמש, בלי לעבור דרך שירות Cloud Run שמריץ את קוד השרת של אפליקציית האינטרנט. מידע נוסף על היתרונות הכלליים של רשתות CDN זמין בכתובת web.dev.
ההגדרה הבסיסית של Cloud CDN מוגדרת על ידי App Hosting ואי אפשר לשנות אותה, אבל יש כמה דברים שאפשר לעשות כדי לייעל את השמירה במטמון, לשפר את מהירות טעינת דפים, לצמצם את כמות התוכן שלא נשמר במטמון שמחויב עליו ולמזער את תעבורת הנתונים אל Cloud Run.
תוכן שניתן לשמור במטמון
מערכת Cloud 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.גודל התשובה הוא 10MiB או פחות.
וגם אף אחד מהתנאים הבאים לא מתקיים:
בתשובה יש כותרת
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 מגדיר הנחיות של cache-control באופן מרומז על סמך מספר גורמים. עם זאת, אפשר לשנות את ההגדרות האלה על ידי הגדרת הכותרת באופן ידני בקובץ 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 של Angular לא מגדיר הנחיות מפורשות של בקרת מטמון כברירת מחדל. אפשר להוסיף משלכם על ידי ציון כותרות של בקרת מטמון בנתיבי השרת. לדוגמה, כדי לאפשר ל-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 |
לא רלוונטי | תגובה עם ההנחיה private לא נשמרת במטמון של Cloud CDN, גם אם התגובה נחשבת ככזו שאפשר לשמור במטמון. יכול להיות שהתוצאה עדיין תישמר במטמון של לקוחות (כמו דפדפנים). משתמשים ב-no-store כדי למנוע שמירה במטמון של כל התשובות. |
max-age=SECONDS |
המערכת מתעלמת מהוראת הבקשה max-age. תגובה שנשמרה במטמון מוחזרת כאילו הכותרת הזו לא נכללה בבקשה. |
תגובה עם ההנחיה max-age נשמרת במטמון למשך מספר השניות שמוגדר. |
s-maxage=SECONDS |
לא רלוונטי | תגובה עם ההנחיה s-maxage נשמרת במטמון למשך מספר השניות שמוגדר. אם יש גם 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 לא מבצע טרנספורמציות. |
מדידת תנועה במטמון ותנועה שלא במטמון
בכרטיסייה App Hosting > Usage במסוף Firebase, בגרף Cloud CDN - Outgoing Bandwidth מוצגים בייטים ששירתו ממטמון ובייטים שלא שירתו ממטמון, ויש סימן לכל השקה. אפשר להשתמש בתרשים הזה כדי למדוד את היעילות של מאמצי האופטימיזציה של המטמון.
אפשר גם לראות את שיעור הפגיעה במטמון של מסלולים ספציפיים באפליקציית האינטרנט באמצעות מעקב לפי מסלול.