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

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