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 מוגשת ללקוח למשך עד שניות בזמן שמתבצעת אימות מחדש באופן אסינכרוני. |
must-revalidate |
לא רלוונטי | תגובה עם must-revalidate מאומתת מחדש בשרת המקור אחרי שהתוקף שלה פג. תשובות עם ההנחיה הזו לא מוצגות כשהן לא עדכניות. |
proxy-revalidate |
תגובה עם proxy-revalidate מאומתת מחדש בשרת המקור אחרי שהתוקף שלה פג. תשובות עם ההנחיה הזו לא מוצגות כשהן לא עדכניות. |
|
no-transform |
לא רלוונטי | Cloud CDN לא מחיל טרנספורמציות. |
מדידה של תנועת גולשים במטמון ושל תנועת גולשים שלא במטמון
בתרשים Cloud CDN - Outgoing Bandwidth (רוחב פס יוצא) בכרטיסייה Usage (שימוש) במסוף App Hosting מוצגים בייטים שמוגשים מהמטמון ושלא מהמטמון, ומוצג סימן לכל השקה. אפשר להשתמש בתרשים הזה כדי למדוד את היעילות של מאמצי האופטימיזציה של המטמון.