הגדרת התנהגות השמירה במטמון

רשת Media CDN מציגה תוכן קרוב ככל האפשר למשתמשים באמצעות תשתית מטמון הקצה הגלובלית של Google כדי לשמור תוכן במטמון ולהפחית את העומס על תשתית המקור.

אתם יכולים לקבוע איך התוכן יישמר במטמון לכל מסלול. כך תוכלו לשפר את ההתנהגות על סמך סוג התוכן, מאפייני בקשת הלקוח ודרישות הרעננות שלכם.

אפשרות שמירה במטמון

בקטעים הבאים מוסבר אילו תגובות נשמרות במטמון של Media CDN ואיך לשפר את הפחתת העומס מהמטמון.

התנהגות ברירת המחדל של שמירת נתונים במטמון

כברירת מחדל, ההגדרות הבאות שקשורות למטמון חלות על כל שירות Edge Cache:

  • מצב המטמון שמוגדר כברירת מחדל של CACHE_ALL_STATIC:

    • מכבד את ההוראות של מטמון המקור, כמו Cache-Control או Expires, עד לערך TTL מקסימלי שניתן להגדרה.
    • אם לא קיימות הנחיות מטמון של מקור, המערכת יוצרת מטמון של סוגי מדיה סטטיים באופן אוטומטי עם TTL שמוגדר כברירת מחדל של 3,600 שניות.
    • מטמון של קודי סטטוס HTTP‏ 200, 204 ו-206 (מטמון שלילי לא מופעל).
  • לא שומרת במטמון תגובות עם הנחיות לניהול מטמון no-store או private או תגובות שלא ניתן לשמור במטמון בדרך אחרת.

תשובות שלא מכילות תוכן סטטי או שחסרות בהן הנחיות תקפות בנוגע למטמון לא נשמרות במטמון, אלא אם הגדרתם במפורש לשמור אותן במטמון. במסמכי התיעוד בנושא מצבי מטמון מוסבר איך לשנות את התנהגות ברירת המחדל .

התנהגות ברירת המחדל שקולה ל-cdnPolicy הבא. מסלולים ללא cdnPolicy מוגדר מתנהגים כאילו יש להם את ההגדרה הבאה:

cdnPolicy:
  cacheMode: CACHE_ALL_STATIC
  defaultTtl: 3600s
  cacheKeyPolicy:
    includeProtocol: false
    excludeHost: false
    excludeQueryString: false
  signedRequestMode: DISABLED
  negativeCaching: false

תשובות שניתנות לשמירה במטמון

תגובה שניתנת לשמירה במטמון היא תגובת HTTP ש-Media CDN יכול לאחסן ולאחזר במהירות, וכך לקצר את זמני הטעינה. לא כל התגובות של HTTP ניתנות לשמירה במטמון.

אפשר להגדיר מצבי מטמון לכל מסלול כדי לשנות את ההתנהגות הזו (לדוגמה, באמצעות מצב המטמון CACHE_ALL_STATIC כדי לשמור במטמון סוגי מדיה נפוצים), גם אם השרת המקורי לא מגדיר הנחיה לבקרת מטמון בתגובה.

בקשות ותשובות שעומדות בקריטריונים שמוגדרים בתשובות שלא ניתן לשמור במטמון קודמות לאפשרות השמירה במטמון.

בטבלה הבאה מתוארות הדרישות לשמירת תגובות HTTP מסוימות במטמון. התגובות של GET ושל HEAD צריכות לעמוד בדרישות האלה.

מאפיין HTTP דרישות
קוד סטטוס קוד הסטטוס של התשובה חייב להיות אחד מהקודים הבאים: 200,‏ 203,‏ 204,‏ 206,‏ 300,‏ 301,‏ 302,‏ 307,‏ 308,‏ 400,‏ 403,‏ 404,‏ 405,‏ 410,‏ 451,‏ 500,‏ 501,‏ 502,‏ 503 או 504.
שיטות HTTP GET וגם HEAD
כותרות הבקשה רוב ההוראות לבקשות שמירה במטמון מוזנחות. מידע נוסף זמין במאמר בנושא הוראות לשליטה במטמון.
כותרות תגובה

מכיל הוראה תקפה של HTTP caching כמו Cache-Control: max-age=3600, public.

יש לו מצב מטמון ששומר את התוכן במטמון, או שיש לו כותרת Expires עם תאריך עתידי.

גודל התגובה עד 100 GiB.

הכותרת HTTP Age מוגדרת על סמך הזמן שחלף מאז שמערכת Media CDN שמרה את התגובה במטמון בפעם הראשונה, ובדרך כלל מייצגת את מספר השניות שחלפו מאז שהאובייקט נשמר במטמון במיקום של הגנה על המקור. אם המקור שלכם יוצר כותרת תגובה של Age, צריך להשתמש במצב מטמון FORCE_CACHE_ALL כדי למנוע אימותים מחדש כשהערך של Age חורג מ-TTL של המטמון.

מידע נוסף על האופן שבו Media CDN מפרש הוראות לשמירה במטמון של HTTP מופיע במאמר הוראות לשליטה במטמון.

דרישות לגבי מקורות

כדי לאפשר ל-Media CDN לשמור במטמון תגובות ממקורות שגדולות מ-1 MiB, מקור צריך לכלול את הפרטים הבאים בכותרות התגובה לבקשות GET, אלא אם צוין אחרת:

  • כותרת תגובת HTTP‏ Last-Modified או ETag (מאמת).
  • כותרת HTTP Date תקינה.
  • כותרת Content-Length תקינה.
  • כותרת התגובה Content-Range, בתגובה לבקשה Range GET. הכותרת Content-Range חייבת לכלול ערך תקין בפורמט bytes x-y/z (כאשר z הוא גודל האובייקט).

פרוטוקול המקור שמוגדר כברירת מחדל הוא HTTP/2. אם המקורות שלכם תומכים רק ב-HTTP/1.1, אתם יכולים להגדיר את שדה הפרוטוקול באופן מפורש לכל מקור.

תשובות שלא ניתן לשמור במטמון

בטבלה הבאה מפורטים מאפייני הבקשה והתגובה שמונעים שמירה של תגובה במטמון. תשובות שאפשר לשמור במטמון אבל תואמות לקריטריונים של 'לא ניתן לשמירה במטמון' לא נשמרות במטמון.

מאפיין HTTP דרישה
קוד סטטוס

קוד סטטוס שאינו מוגדר כקוד שניתן לשמור במטמון, כמו HTTP 401,‏ HTTP 412 או HTTP 505.

קודי הסטטוס האלה מייצגים בדרך כלל בעיות שקשורות ללקוח ולא לסטטוס המקור. שמירת התשובות האלה במטמון עלולה להוביל לתרחישים של 'הרעלת מטמון', שבהם תשובה 'לא טובה' שמופעלת על ידי משתמש נשמרת במטמון עבור כל המשתמשים.

כותרות הבקשה

כדי שהתשובות לבקשות עם כותרת בקשה Authorization יישמרו במטמון, הן צריכות לכלול הוראה public Cache-Control.

הוראת no-store בבקשה גורמת לכך שהתגובה לא תישמר במטמון. מידע נוסף זמין במאמר בנושא הוראות לשליטה במטמון.

כותרות תגובה

כולל כותרת 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.

במצב CACHE_ALL_STATIC או USE_ORIGIN_HEADERS, יש הוראה no-store או private לשליטה במטמון.

גודל התגובה יותר מ-100 GiB.

הכללים האלה חלים בנוסף למצב מטמון שהוגדר. פרטים נוספים:

  • אם מצב המטמון CACHE_ALL_STATIC מוגדר, רק תגובות שנחשבות לתוכן סטטי או תגובות עם הוראות מטמון תקינות בכותרות התגובה שלהן נשמרות במטמון. תשובות אחרות מועברות כמו שהן.
  • במצב מטמון FORCE_CACHE_ALL, כל התגובות נשמרות במטמון ללא תנאי, בכפוף לדרישות לגבי אי-שמירה במטמון שצוינו קודם.
  • במצב מטמון USE_ORIGIN_HEADERS, התגובות צריכות להגדיר הנחיות מטמון תקינות בכותרות התגובה שלהן, בנוסף להיות קוד סטטוס שניתן לשמירה במטמון.

הערות:

  • התגובות שלא נשמרות במטמון לא משנות את ההנחיות של בקרת המטמון או את הכותרות האחרות שלהן, והן מועברות דרך ה-proxy כמו שהן.
  • אפשר לכווץ את הכותרות Cache-Control ו-Expires של התשובות לשדה Cache-Control אחד. לדוגמה, תגובה עם Cache-Control: public ו-Cache-Control: max-age=100 בשורות נפרדות תכווץ ל-Cache-Control: public,max-age=100.
  • תשובות שלא ניתן לשמור במטמון (תשובות שלעולם לא יישמרו במטמון) לא נספרות כ-Cache Egress מבחינת חיוב.

שימוש במצבי מטמון

מצבי מטמון מאפשרים להגדיר מתי Media CDN צריך להתייחס להוראות מטמון של מקור, לשמור במטמון סוגים של מדיה סטטית ולשמור במטמון את כל התגובות מהמקור, ללא קשר להוראות שהוגדרו.

מצבי מטמון מוגדרים ברמת המסלול, ובשילוב עם החלפות של TTL, מאפשרים להגדיר את התנהגות המטמון לפי מארח, נתיב, פרמטרים של שאילתות וכותרות (כל פרמטר של בקשה שאפשר להתאים).

  • כברירת מחדל, Media CDN משתמש במצב מטמון CACHE_ALL_STATIC, שבו סוגי מדיה סטטיים נפוצים נשמרים אוטומטית במטמון למשך שעה אחת (3,600 שניות), תוך מתן עדיפות לכל הוראות המטמון שצוינו על ידי המקור עבור תגובות שניתנות לשמירה במטמון.
  • אפשר להגדיר את השדה cdnPolicy.defaultTtl במסלול כדי להגדיל או להקטין את ה-TTL של המטמון שמוחל על תשובות ללא הגדרה מפורשת של TTL של מטמון (הוראה max-age או s-maxage).
  • כדי למנוע שמירת תגובות לא מוצלחות במטמון למשך זמן ארוך מהמתוכנן, קודי סטטוס שאינם 2xx (לא מוצלחים) לא נשמרים במטמון בהתאם ל-Content-Type (סוג MIME) שלהם, ולא מוחל עליהם ה-TTL שמוגדר כברירת מחדל.

בטבלה הבאה מוצגים מצבי הזיכרון הזמני (cache) שזמינים, שמוגדרים ב-cdnPolicy.cacheMode של כל מסלול.

מצב מטמון התנהגות
USE_ORIGIN_HEADERS כדי להשתמש בתכונה הזו, התגובות של השרת המקורי צריכות להגדיר הנחיות תקפות למטמון וכותרות תקפות של מטמון. רשימת הדרישות המלאה מופיעה במאמר בנושא תשובות שניתנות לשמירה במטמון.
CACHE_ALL_STATIC

שומר באופן אוטומטי במטמון תשובות מוצלחות עם תוכן סטטי, אלא אם יש להן הנחיה no-store או private. הוראות תקפות של שמירת נתונים במטמון מהמקור מקבלות עדיפות.

תוכן סטטי כולל סרטונים, אודיו, תמונות ונכסי אינטרנט נפוצים, כפי שמוגדרים לפי סוג ה-MIME בכותרת התגובה Content-Type.

FORCE_CACHE_ALL

שומרת במטמון ללא תנאי תגובות מוצלחות, ומבטלת את כל ההוראות של המטמון שהוגדרו על ידי המקור.

חשוב לוודא שלא מוצג תוכן פרטי שמותאם לכל משתמש (כמו HTML דינמי או תשובות של API) כשהמצב הזה מוגדר.

BYPASS_CACHE

כל בקשה שתואמת למסלול עם מצב המטמון הזה תעקוף את המטמון, גם אם יש אובייקט במטמון שתואם למפתח המטמון הזה.

מומלץ להשתמש בזה רק לניפוי באגים, כי Media CDN מיועד להיות תשתית מטמון בקנה מידה עולמי ולא פרוקסי לשימוש כללי.

סוגי MIME של תוכן סטטי

מצב המטמון CACHE_ALL_STATIC מאפשר ל-Media CDN לשמור במטמון באופן אוטומטי תוכן סטטי נפוץ כמו סרטונים, אודיו, תמונות ונכסי אינטרנט נפוצים, על סמך סוג ה-MIME שמוחזר בכותרת התגובה של HTTP‏ CACHE_ALL_STATIC.Content-Type עם זאת, ללא קשר לסוג המדיה, Media CDN נותן עדיפות לכל כותרת מפורשת Cache-Control או Expires בתגובה של שרת המקור.

בטבלה הבאה מפורטים סוגי ה-MIME שאפשר לשמור במטמון באופן אוטומטי באמצעות מצב המטמון CACHE_ALL_STATIC.

תשובות לא נשמרות אוטומטית במטמון אם אין להן כותרת תשובה Content-Type עם ערך שתואם לערכים הבאים. צריך לוודא שהתגובה מגדירה הוראת מטמון תקינה, או להשתמש במצב המטמון FORCE_CACHE_ALL כדי לשמור תגובות במטמון ללא תנאי.

קטגוריה סוגי MIME
נכסי אינטרנט text/css text/ecmascript text/javascript application/javascript
גופנים כל סוג תוכן שתואם ל-font/*
תמונות כל סוג תוכן שתואם ל-image/*
סרטונים כל סוג תוכן שתואם ל-video/*
אודיו כל סוג תוכן שתואם ל-audio/*
סוגי מסמכים מפורמטים application/pdf and application/postscript

שימו לב לנקודות הבאות:

  • התוכנה של שרת האינטרנט של המקור צריכה להגדיר את Content-Type לכל תגובה. שרתי אינטרנט רבים מגדירים אוטומטית את הכותרת Content-Type, כולל NGINX,‏ Varnish ו-Apache.
  • כשמשתמשים במסוף Google Cloud או ב-CLI של gcloud כדי להעלות תוכן, Cloud Storage מגדיר את הכותרת Content-Type אוטומטית בזמן ההעלאה.
  • ‫Cloud Storage תמיד מספק כותרת Cache-Control ל-Media CDN. אם לא נבחר ערך באופן מפורש, נשלח ערך ברירת מחדל. כתוצאה מכך, כל התשובות המוצלחות של Cloud Storage נשמרות במטמון בהתאם לערכי ברירת המחדל של Cloud Storage, אלא אם משנים באופן מפורש את המטא-נתונים של בקרת המטמון של אובייקטים ב-Cloud Storage או משתמשים במצב FORCE_CACHE_ALL כדי לבטל את הערכים שנשלחים על ידי Cloud Storage.

אם אפשר לשמור תגובה במטמון על סמך סוג ה-MIME שלה, אבל יש לה הנחיית תגובה Cache-Control של private או no-store או כותרת Set-Cookie, היא לא נשמרת במטמון.

סוגי מדיה אחרים, כמו HTML ‏ (text/html) ו-JSON ‏(application/json), לא נשמרים במטמון כברירת מחדל. סוגי התגובות האלה הם בדרך כלל דינמיים (לכל משתמש), והם גם לא מתאימים לארכיטקטורה של Media CDN. מומלץ להשתמש ב-Cloud CDN כדי להציג נכסי אינטרנט ולשמור במטמון תגובות של API.

הגדרת אורך חיים (TTL) של מטמון

ההגדרות של אורך החיים (TTL) מאפשרות לכם להגדיר ערכי TTL כברירת מחדל לתוכן שנשמר במטמון, ולשנות ערכי TTL שהוגדרו בהוראות של max-age ו-s-maxage לניהול המטמון (או בכותרות Expires) שהוגדרו על ידי מקורות התוכן.

ערכי ה-TTL, בין אם הם מוגדרים על ידי ביטולים או על ידי שימוש בהנחיית מטמון, הם אופטימיים. יכול להיות שתוכן שלא ניגשים אליו לעיתים קרובות או שהוא לא פופולרי יוסר מהזיכרון מטמון לפני שיגיע לזמן החיים שלו.

בטבלה הבאה מוצגות שלוש הגדרות TTL.

הגדרה ברירת מחדל מינימום מקסימום תיאור מצבי מטמון רלוונטיים
Default TTL שעה אחת
(3,600 שניות)
0 שניות שנה אחת
(31,536,000 שניות)

ערך ה-TTL שיוגדר אם השרת המקורי לא ציין כותרת max-age או s-maxage.

אם המקור מציין כותרת s-maxage, היא תשמש במקום ערך ה-TTL בברירת המחדל שמוגדר כאן.

כשמשתמשים ב-FORCE_CACHE_ALL כדי לשמור במטמון באופן לא מותנה את כל התשובות, משך הזמן לחיים (TTL) שמוגדר כברירת מחדל משמש להגדרת משך הזמן לחיים של המטמון. המערכת מתעלמת מכל שאר הערכים וההוראות.

CACHE_ALL_STATIC

FORCE_CACHE_ALL

Max TTL יום אחד
(86,400 שניות)
0 שניות שנה אחת
(31,536,000 שניות)
עבור תשובות שניתנות לשמירה במטמון, ערך ה-TTL המקסימלי המותר. ערכים שגדולים מהערך הזה מוגבלים לערך של maxTtl. CACHE_ALL_STATIC
Client TTL לא מוגדר כברירת מחדל. 0 שניות יום אחד
(86,400 שניות)
עבור תגובות שניתנות לשמירה במטמון, ערך ה-TTL המקסימלי שניתן להגדיר בתגובה במורד הזרם (פונה ללקוח) אם הוא צריך להיות שונה מערכי TTL אחרים.

CACHE_ALL_STATIC

FORCE_CACHE_ALL

הגדרת ערך TTL כלשהו לאפס (0 שניות) גורמת לכך שכל בקשה תאומת מחדש עם המקור לפני שהתגובה מוגשת, ומגדילה את העומס על המקור אם ההגדרה רחבה מדי.

כשמצב המטמון מוגדר ל-Use Origin Headers, אי אפשר להגדיר את הגדרות ה-TTL כי Media CDN מסתמך על השרת המקורי כדי להגדיר את ההתנהגות.

הערות:

  • הערך של TTL מקסימלי תמיד צריך להיות גדול מהערך של TTL ברירת מחדל (או שווה לו).
  • הערך של TTL של הלקוח תמיד צריך להיות קטן מהערך של TTL מקסימלי (או שווה לו).
  • כש-Media CDN מבטל ערך TTL של מקור, הכותרת Cache-Control שנשלחת ללקוח משקפת גם את הערך הזה.
  • אם המקור מגדיר כותרת Expires ו-Media CDN מבטל את ה-TTL האפקטיבי (על סמך חותמת הזמן), הכותרת Expires מוחלפת בכותרת Cache-Control בתגובה במורד הזרם ללקוח.

Negative caching

שמירת מטמון שלילית מגדירה איך קודי סטטוס של HTTP שלא מציינים הצלחה (כלומר, קודי סטטוס שאינם 2xx) נשמרים במטמון על ידי Media CDN.

כך אפשר לשמור במטמון תגובות שגיאה כמו הפניות (HTTP 301 ו-308) ותגובות של 'לא נמצא' (HTTP 404) קרוב יותר למשתמשים, וגם להפחית את עומס המקור באופן כללי יותר אם התגובה לא צפויה להשתנות ואפשר לשמור אותה במטמון.

כברירת מחדל, negative caching מושבת. בטבלה הבאה מוצגים ערכי ברירת המחדל של כל קוד סטטוס כשמפעילים שמירה במטמון של תשובות שליליות ולא משתמשים ב-negativeCachingPolicy.

קודי סטטוס ביטוי הסיבה TTL
HTTP 300 בחירות מרובות 10 דקות