ניהול ההתנהגות של המטמון

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 רק אם האפליקציה מציגה תוכן שונה בהתאם להרשאה של המשתמש.