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
מפורשת.גודל התגובה הוא עד 10MB.
ואף אחד מהתנאים הבאים לא מתקיים:
בתשובה יש כותרת
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 מגדירה הוראות לניהול מטמון באופן משתמע על סמך מספר גורמים. עם זאת, אפשר לשנות את ההגדרות האלה על ידי הגדרת הכותרת באופן ידני בקובץ 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 מוצגים הבייטים שסופקו מהמטמון ומחוץ למטמון, ויש סימון לכל השקות. אפשר להשתמש בתרשים הזה כדי למדוד את היעילות של המאמצים שלכם לאופטימיזציה של המטמון.