Firebase Hosting משתמש ב-CDN גלובלי כדי להפוך את האתר למהיר ככל האפשר.
כל התוכן הסטטי שמתבקש נשמר אוטומטית במטמון ב-CDN. אם תפרסו מחדש את התוכן של האתר, Firebase Hosting כל התוכן שנשמר במטמון ברשת ה-CDN יימחק באופן אוטומטי עד לבקשה הבאה.
עם זאת, מכיוון שהשירותים Cloud Functions ו-Cloud Run יוצרים תוכן באופן דינמי, התוכן של כתובת URL מסוימת יכול להשתנות בהתאם לגורמים כמו קלט משתמש או זהות המשתמש. כדי להתמודד עם הבעיה הזו, בקשות שמטופלות על ידי קוד בקצה העורפי לא נשמרות במטמון ב-CDN כברירת מחדל.
אבל אתם יכולים להגדיר את התנהגות הקאשינג לתוכן דינמי. לדוגמה, אם פונקציה יוצרת תוכן חדש רק מדי פעם, אפשר להאיץ את האפליקציה על ידי שמירת התוכן שנוצר במטמון למשך תקופה קצרה לפחות.
באופן דומה, אפשר להגדיר את התנהגות השמירה במטמון כדי להפחית את העלויות של הפעלת הפונקציה, כי התוכן מוגש מ-CDN ולא מפונקציה שהופעלה. מידע נוסף על אופטימיזציה של הפעלת פונקציות ושירותים זמין במסמכי העזרה של Cloud Functions ושל Cloud Run.
החריג הוא בקשות שמחזירות שגיאות 404. רשת ה-CDN שומרת במטמון את תגובת 404 של השירות שלכם לכתובת URL שלא קיימת למשך 10 דקות, כך שבקשות עתידיות לכתובת ה-URL הזו יטופלו על ידי רשת ה-CDN. אם תשנו את השירות כך שהתוכן יופיע בכתובת ה-URL הזו, ה-CDN ימשיך להציג את כל השגיאות 404 שנשמרו במטמון למשך 10 דקות (לכל היותר), ואז יציג את התוכן מכתובת ה-URL הזו כרגיל.
אם תגובת 404 כבר מכילה כותרות של שמירת נתונים במטמון שהוגדרו על ידי שירות Cloud Functions או Cloud Run, הן מבטלות את ברירת המחדל של 10 דקות וקובעות באופן מלא את התנהגות השמירה במטמון של ה-CDN.
במסמכי התיעוד למפתחים של Google מפורט מידע נוסף על התנהגות של שמירת נתונים במטמון.
הגדרת Cache-Control
הכלי העיקרי שבו משתמשים כדי לנהל את המטמון של תוכן דינמי הוא הכותרת Cache-Control
. באמצעות הגדרת הכותרת הזו, אתם יכולים להעביר לדפדפן ול-CDN מידע על משך הזמן שבו התוכן יכול להישמר במטמון. בפונקציה שלך,
הגדרת את Cache-Control
כך:
res.set('Cache-Control', 'public, max-age=300, s-maxage=600');
בדוגמה הזו של כותרת, ההוראות עושות שלושה דברים:
public
— סימון המטמון כpublic
. המשמעות היא שגם הדפדפן וגם השרתים המתווכים (כלומר, ה-CDN של Firebase Hosting) יכולים לשמור את התוכן במטמון.
max-age
– מציין לדפדפן ול-CDN כמה שניות הם יכולים לשמור במטמון את התוכן. כשזמן התפוגה שהוגדר מסתיים, הדפדפן ורשת ה-CDN צריכים לאמת מחדש את התוכן מול שרת המקור. בדוגמה של הכותרת, אנחנו מאפשרים לדפדפן ול-CDN לשמור את התוכן במטמון למשך חמש דקות (בקטעs-maxage
בהמשך מפורטים אמצעי בקרה ספציפיים לשמירת תוכן במטמון ב-CDN).
s-maxage
— מבטל את ההנחיהmax-age
רק לגבי שמירה במטמון ב-CDN. ההנחיה הזו מציינת ל-CDN כמה שניות הוא יכול לשמור את התוכן במטמון. כשזמן ההגדרה מסתיים, רשת ה-CDN צריכה לאמת מחדש את התוכן מול שרת המקור. בכותרת לדוגמה, אנחנו מבטלים את ההגדרה שלmax-age
לרשת ה-CDN בלבד ומאפשרים לרשת ה-CDN לשמור את התוכן במטמון למשך עשר דקות.
למאפיינים max-age
ו-s-maxage
, מגדירים את הערכים שלהם למשך הזמן הארוך ביותר שבו אתם מוכנים שהמשתמשים יקבלו תוכן לא עדכני. אם דף משתנה כל כמה שניות, צריך להשתמש בערך זמן קטן. עם זאת, אפשר לשמור במטמון סוגים אחרים של תוכן למשך שעות, ימים או אפילו חודשים.
מידע נוסף על הכותרת Cache-Control
זמין ב-Mozilla Developer Network ובמסמכי התיעוד למפתחי אתרים של Google.
מתי מוצג תוכן שמור במטמון?
הדפדפן והמטמון של ה-CDN שומרים את התוכן במטמון על סמך:
- שם המארח
- הנתיב
- מחרוזת השאילתה
- התוכן של כותרות הבקשה שצוינו בכותרת
Vary
שינוי כותרות
הכותרת Vary
קובעת באילו כותרות של בקשות צריך להשתמש כדי לספק תגובה מתאימה (אם התוכן שנשמר במטמון תקף או אם צריך לאמת מחדש את התוכן מול השרת המקורי).
Firebase Hosting מגדיר באופן אוטומטי כותרת Vary
מתאימה בתשובה שלכם למצבים נפוצים. ברוב המקרים, אין צורך לדאוג לגבי הכותרת Vary
. עם זאת, בתרחישי שימוש מתקדמים מסוימים, יכול להיות שיש לכם כותרות אחרות שצריך להשפיע על המטמון. במקרים כאלה, אפשר להגדיר את הכותרת Vary
בתגובה. לדוגמה:
res.set('Vary', 'Accept-Encoding, X-My-Custom-Header');
במקרה כזה, הערך של הכותרת Vary
הוא:
vary: X-My-Custom-Header, x-fh-requested-host, accept-encoding, cookie, authorization
עם ההגדרות האלה, שתי בקשות זהות עם כותרות שונות של X-My-Custom-Header
נשמרות במטמון בנפרד. שימו לב ש-Hosting מוסיף את Cookie
ואת Authorization
לכותרת Vary
כברירת מחדל כשמתבצעת בקשה לתוכן דינמי. כך אפשר לוודא שכל כותרת הרשאה של סשן או קובץ Cookie שבה אתם משתמשים היא חלק ממפתח המטמון, וכך למנוע דליפות תוכן מקריות.
חשוב לזכור:
אפשר לשמור במטמון רק בקשות מסוג
GET
ו-HEAD
. בקשות HTTPS שנעשה בהן שימוש בשיטות אחרות אף פעם לא נשמרות במטמון.צריך להיזהר כשמוסיפים הגדרות לכותרת
Vary
. ככל שמוסיפים יותר הגדרות, כך הסיכוי שה-CDN יוכל להציג תוכן שנשמר במטמון קטן יותר. חשוב לזכור גם שהמאפייןVary
מבוסס על כותרות הבקשה ולא על כותרות התגובה.
שימוש בקובצי Cookie
כשמשתמשים ב-Firebase Hosting יחד עם Cloud Functions או Cloud Run, קובצי Cookie בדרך כלל מוסרים מבקשות נכנסות. ההגדרה הזו נדרשת כדי לאפשר התנהגות מטמון יעילה ב-CDN.
רק קובץ ה-Cookie שנקרא __session
מורשה לעבור אל הביצוע של האפליקציה.
אם קובץ ה-Cookie __session
קיים, הוא הופך אוטומטית לחלק ממפתח המטמון, כך ששני משתמשים עם קובצי Cookie שונים לא יכולים לקבל את התגובה המאוחסנת במטמון של המשתמש השני. משתמשים בקובץ ה-Cookie __session
רק אם האפליקציה מציגה תוכן שונה בהתאם להרשאת המשתמש.