ב-Media CDN אפשר לציין כותרות מותאמות אישית של בקשות ותשובות.
כותרות מותאמות אישית מאפשרות לכם:
- הפונקציה מחזירה נתונים גיאוגרפיים על הלקוח, כמו מדינה, אזור או עיר, שאפשר להשתמש בהם כדי להציג תוכן מותאם למיקום.
- לבדוק אם התגובה הוגשה מהמטמון (במלואה או בחלקה) ומאיזה מיקום במטמון היא הוגשה.
- הסרה, החלפה או הוספה של כותרות לבקשה ולתשובה.
הגדרת כותרות בהתאמה אישית
הכותרות מוגדרות בכל מסלול, כך שאפשר להוסיף ולהסיר כותרות לתוכן שונה, כמו קובצי מניפסט או פלחי וידאו.
מומלץ להגדיר כותרות בקשה מותאמות אישית לכל מסלול בשלב מוקדם בנתיב העיבוד של ה-CDN, לפני קבלת החלטות לגבי שמירה במטמון. לדוגמה, אם מגדירים כותרת cache-control ככותרת מותאמת אישית לכל מסלול, היא משפיעה על התנהגות הקאשינג ב-CDN.
כברירת מחדל, ערכי הכותרות שנוספים מופרדים בפסיקים ומצורפים לכותרות התגובה או הבקשה עם אותם שמות שדות.
כדי להחליף ערכים קיימים, מגדירים את replace ל-true.
gcloud ו-YAML
כדי להציג את הגדרות ה-YAML של המשאב EdgeCacheService, משתמשים בפקודה הבאה:
gcloud edge-cache services describe prod-media-service
בקטע .routing.pathMatchers[].routeRules[].headerAction מוצגות הכותרות שיוספו ויוסרו:
routeRules:
- priority: 1
description: "video routes"
matchRules:
- prefixMatch: "/video/"
headerAction:
responseHeadersToAdd:
# Return the country (or region) associated with the client's IP address.
- headerName: "client-geo"
headerValue: "{client_region}"
replace: true
requestHeadersToAdd:
# Inform the upstream origin server the request is from Media CDN
- headerName: "x-downstream-cdn"
headerValue: "Media CDN"
responseHeadersToRemove:
- headerName: "X-User-ID"
- headerName: "X-Other-Internal-Header"
Terraform
בקטע הקוד הבא של Terraform מוצג כלל ניתוב עם כותרות בהתאמה אישית.
בדוגמה הזו:
- הוספת כותרת
client-geoמותאמת אישית לתגובה באמצעות המשתנה{client_region}, שמחזיר את המדינה (או האזור) שמשויכת לכתובת ה-IP של הלקוח. - הוספת כותרת
x-downstream-cdnבהתאמה אישית לבקשה באמצעות מחרוזת סטטית. - מסירה שתי כותרות פנימיות.
כדי להגדיר כותרות מותאמות אישית ספציפיות למקור, אפשר לעיין במאמר בנושא הגדרת שינויים בכותרות או שינויים בשם המארח שספציפיים למקור.
משתני כותרת דינמיים
כותרות בהתאמה אישית יכולות להכיל משתנה דינמי אחד או יותר.
כותרות בקשה שמהוות חלק ממדיניות מפתח המטמון (cacheKeyPolicy.includedHeaderNames) יכולות להכיל משתנה מותאם אישית אחד או יותר. כותרות של בקשות שמכילות משתנים דינמיים אחרים לא יכולות להיות חלק ממפתח המטמון.
| משתנה | תיאור | נתמך בכותרות של בקשות | תמיכה בכותרות של בקשות במפתח מטמון | נתמך בכותרות של תגובות |
|---|---|---|---|---|
cdn_cache_status |
רשימה מופרדת בפסיקים של המיקומים (קוד IATA של נמל התעופה הקרוב ביותר) והסטטוסים של כל צומת מטמון בנתיב הבקשה/התגובה, כאשר הערך הימני ביותר מייצג את המטמון הקרוב ביותר למשתמש. | ✔ | ||
client_city |
שם העיר שממנה נשלחה הבקשה – לדוגמה, Mountain View למאונטיין ויו, קליפורניה. אין רשימה קנונית של ערכים תקינים למשתנה הזה. שמות הערים יכולים להכיל אותיות, מספרים, רווחים ותווים מסוג US-ASCII:
!#$%&'*+-.^_`|~. |
✔ | ✔ | |
client_city_lat_long |
קו הרוחב וקו האורך של העיר שממנה הגיעה הבקשה – לדוגמה, 37.386051,-122.083851 עבור בקשה ממאונטיין ויו. |
✔ | ✔ | |
client_region |
המדינה (או האזור) שמשויכת לכתובת ה-IP של הלקוח. זהו קוד אזור Unicode CLDR, כמו US או FR.
ברוב המדינות, הקודים האלה תואמים ישירות לקודי ISO-3166-1 alpha-2. |
✔ | ✔ | ✔ |
client_region_subdivision |
חלוקת המשנה – למשל, המחוז או המדינה – של המדינה שמשויכת לכתובת ה-IP של הלקוח. זהו מזהה של חלוקת משנה במאגר CLDR של Unicode, כמו USCA או CAON. קודי ה-Unicode האלה
נגזרים מחלוקות המשנה שמוגדרות בתקן ISO-3166-2. |
✔ | ✔ | ✔ |
client_rtt_msec |
זמן השידור המשוער של הלוך ושוב בין ה-CDN לבין לקוח ה-HTTP(S), באלפיות השנייה. זהו הפרמטר של זמן הלוך ושוב מוחלק (SRTT) שנמדד על ידי מחסנית ה-TCP של ה-CDN, בהתאם ל-RFC 2988. | ✔ | ✔ | |
device_request_type |
סוג המכשיר שבו הלקוח משתמש. אלה הערכים התקינים: DESKTOP, MOBILE, TABLET, SMART_TV, GAME_CONSOLE, WEARABLE ו-UNDETERMINED. |
✔ | ✔ | |
edge_location_country_code |
מזהה את המדינה או האזור הגיאוגרפיים של שרת קצה ספציפי של Media CDN שמשרת את הבקשה של הלקוח. זהו קוד מדינה בן 2 אותיות לפי תקן ISO 3166-1, כמו US או JP.
הקודים האלה בני שתי אותיות נגזרים מקודי המדינות הרשמיים
שמוגדרים בתקן ISO 3166-1. |
✔ | ✔ | |
host |
המארח ומספר היציאה של השרת שאליו נשלחה במקור בקשת הלקוח, בהתאם לערך של כותרת הבקשה Host ל-HTTP/1.1 או של פסאודו-כותרת :authority ל-HTTP/2. |
✔ | ✔ | |
original_request_id |
המזהה הייחודי שהוקצה לבקשה שיצרה במקור את התשובה הזו. השדה הזה מאוכלס רק אם הוא שונה מ-
request_id בתשובות שנשמרו במטמון. |
✔ | ||
origin_name |
משאב EdgeCacheOrigin שממנו התקבלה התגובה באמצעות שרת proxy. |
✔ | ||
origin_request_header |
משקף את הערך של כותרת המקור בבקשה לתרחישי שימוש של שיתוף משאבים בין מקורות (CORS). | ✔ | ||
proxy_status |
רשימה של שרתי proxy של HTTP בתגובה. הערך מוגדר על ידי RFC 9209.
משאב EdgeCacheService מיוצג על ידי Google-Edge-Cache. אם התשובה נשלפה מהמקור,
משאב EdgeCacheOrigin
מיוצג על ידי Google-Edge-Cache-Origin. |
✔ | ||
tls_sni_hostname |
האינדיקציה של שם השרת (כפי שמוגדר ב-RFC 6066), אם הלקוח מספק אותה במהלך לחיצת היד של TLS או QUIC. שם המארח מומר לאותיות קטנות, וכל נקודה בסוף השם מוסרת. | ✔ | ✔ | |
tls_version |
גרסת ה-TLS שנקבעה במשא ומתן בין הלקוח לבין מאזן העומסים
במהלך לחיצת היד של SSL. הערכים האפשריים כוללים TLSv1, TLSv1.1, TLSv1.2 ו-TLSv1.3. אם הלקוח מתחבר באמצעות QUIC במקום TLS, הערך הוא QUIC. |
✔ | ✔ | |
tls_cipher_suite |
סט האלגוריתמים להצפנה שנקבע במהלך לחיצת היד בפרוטוקול TLS. הערך מוגדר על ידי IANA TLS Cipher Suite Registry – לדוגמה, TLS_RSA_WITH_AES_128_GCM_SHA256. הערך הזה ריק
בחיבורי לקוח ב-QUIC ובחיבורים לא מוצפנים. |
✔ | ✔ | |
user_agent_family |
משפחת הדפדפנים שבה הלקוח משתמש. אלה הערכים התקינים: APPLE, APPLEWEBKIT, BLACKBERRY, DOCOMO, GECKO, GOOGLE, KHTML, KOREAN, MICROSOFT, MSIE, NOKIA, NETFRONT, OBIGO, OPENWAVE, OPERA, OTHER, POLARIS, TELECA, SEMC, SMIT ו-USER_DEFINED. |
✔ | ✔ |
השיקולים הבאים רלוונטיים למשתנים מותאמים אישית:
כותרות קיימות של בקשות ותגובות נשמרות, למעט הכותרות הבאות שמוסרות:
X-User-IP- כל הכותרות עם
X-GoogleאוX-GFE
המפתחות והערכים של הכותרות צריכים לעמוד בדרישות של RFC 7230, ואין להשתמש בפורמטים מיושנים.
כל מפתחות הכותרות הם באותיות קטנות (לפי HTTP/2).
חלק מהכותרות אוחדו. אם יש כמה מופעים של אותו מפתח כותרת (לדוגמה,
Via), מאזן העומסים משלב את הערכים שלהם לרשימה אחת של ערכים מופרדים בפסיקים עבור מפתח כותרת יחיד. רק הכותרות שהערכים שלהן יכולים להיות מיוצגים כרשימה מופרדת בפסיקים מאוחדות. כותרות אחרות, כמוSet-Cookie, אף פעם לא מתמזגות.חלק מהכותרות מתווספות, או שערכים מצורפים אליהן. Media CDN תמיד מוסיף או משנה כותרות מסוימות, כמו
X-Forwarded-For.Media CDN מרחיב כל כותרת תגובה עם משתנה נתמך, גם אם היא מוגדרת על ידי הלקוח או המקור. כך תוכלו להגדיר כותרות דינמיות מהלקוח (כמו נגן וידאו) או מתשתית המקור, בנוסף להגדרת כותרות בהתאמה אישית.
לדוגמה, בהתאם לכללים שמתוארים למעלה, הכותרות
X-Goog-ו-X-Amz-נשמרות ומוצגות באותיות קטנות.
ערכי סטטוס המטמון
משתנה הכותרת {cdn_cache_status} יכול להחזיר כמה ערכים שמתאימים לרמת המטמון שסיפקה את התגובה. כדאי להיעזר בהנחיות הבאות כדי להבין את משתנה הכותרת {cdn_cache_status}:
- אם הכותרת מכילה את הערך
hit, התוכן המבוקש אוחזר מהמטמון. - אם הכותרת מכילה את הערך
miss, התוכן המבוקש לא נמצא בצומת מטמון והיה צריך לאחזר אותו מצומת במעלה הזרם. - אם הכותרת מכילה את הערך
chunked, התוכן המבוקש לא נמצא בצומת מטמון והיה צריך לאחזר אותו מצומת במעלה הזרם, והתגובה במעלה הזרם לא כללה כותרתContent-Length. - אם הכותרת מכילה את הערך
fetch, התוכן המבוקש אוחזר מהמקור. - אם הכותרת מכילה את הערך
bypassed, המטמון עוקף על ידי הגדרת הבקשה. אם הכותרת מכילה
uncacheable, חלק מהרכיבים בתשתית של שמירת הנתונים במטמון או כולם סיווגו את התוכן המבוקש כתוכן שלא ניתן לשמור במטמון.- אם הכותרת מכילה גם
hitאוmiss, חלק מרכיבי המטמון לא יכללו את התוכן המבוקש במטמון, וחלק כן. - אם הכותרת לא מכילה גם את
hitאו אתmiss, כל רכיבי ה-cache יניחו שהתוכן המבוקש לא ניתן לשמירה ב-cache, וכל הבקשות לתוכן הזה יאוחזרו מהמקור. כדי לוודא שהתוכן שלכם נשמר במטמון בצורה נכונה, כדאי לעיין בדרישות המקור של Media CDN.
- אם הכותרת מכילה גם
כותרות ברירת מחדל
Media CDN מוסיף את כותרות הבקשות והתשובות הבאות לבקשות למקור ולתשובות ללקוח, בהתאמה.
| כותרת | תיאור | בקשה | תשובה |
|---|---|---|---|
x-request-id |
מזהה ייחודי של הבקשה. הערך הזה מתווסף גם ליומן הבקשות בתור jsonPayload.requestId, וכך אפשר לקשר בין בקשה או תגובה של לקוח לבין רשומה ביומן. |
✔ | |
age |
הפונקציה מחזירה את הגיל של האובייקט שנשמר במטמון (מספר השניות שהוא נמצא במטמון). הגיל מחושב בדרך כלל על סמך הזמן שחלף מאז שהאובייקט נשמר במטמון לראשונה במיקום מטמון זנב ארוך (מטמון מגן). תשובות בלי כותרת |
✔ | |
server |
ההגדרה היא Google-Edge-Cache. |
✔ | |
cdn-loop |
מזהה לולאות – למשל, אם המארח המקורי זהה למארח שפונה למשתמש (קצה). טוקן של |
✔ | |
forwarded |
הגרסה המובנית של הכותרת הכותרות האלה מאפשרות לכם לזהות את כתובת ה-IP של הלקוח המתחבר כששרת Proxy אחד או יותר נמצאים בנתיב. לדוגמה, אם לקוח עם כתובת ה-IP
במקרה של כמה שרתי proxy בצד הלקוח, הלקוח שהתחבר ל-Media CDN הוא הכתובת האחרונה שמצורפת לערך הכותרת. |
✔ | |
x-forwarded-for |
הגרסה הלא מובנית והסטנדרטית דה-פקטו של הכותרת שתי הכותרות נשלחות בבקשה לתמיכה במקורות מדור קודם שאולי לא מכירים את הכותרת |
✔ |
המפתחות של הכותרות הם באותיות קטנות גם בכותרות של הבקשות וגם בכותרות של התגובות, כי המפתחות של הכותרות הם לא תלויי-רישיות.
אפשר להוסיף כותרות אחרות, כולל המיקום של נקודת הנוכחות (PoP) בקצה וסטטוס המטמון (כמו hit ו-miss), באמצעות משתני כותרת דינמיים.