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אוNext-Url.לתשובה יש כותרת
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
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 |
לא רלוונטי | תגובה עם ההוראה private לא נשמרת במטמון על ידי Cloud CDN, גם אם התגובה נחשבת כניתנת לשמירה במטמון. יכול להיות שהלקוחות (כמו דפדפנים) עדיין ישמרו את התוצאה במטמון. משתמשים ב-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 לא מבצע טרנספורמציות. |
מדידת תנועה שנשמרה במטמון ותנועה שלא נשמרה במטמון
בכרטיסייה App Hosting > Usage במסוף Firebase, בתרשים Cloud CDN - רוחב הפס לנתונים יוצאים מוצגים הבייטים שנשמרו במטמון ואלה שלא נשמרו במטמון, ויש סימון לכל השקה. אתם יכולים להשתמש בתרשים הזה כדי למדוד את היעילות של מאמצי האופטימיזציה של המטמון.
אפשר גם לראות את שיעור המציאה במטמון של מסלולים ספציפיים באפליקציית האינטרנט באמצעות מעקב מבוסס-מסלול.