הגדרת כותרות מותאמות אישית

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

route_rule {
  description = "video routes"
  priority    = 1
  match_rule {
    prefix_match = "/video/"
  }
  origin = google_network_services_edge_cache_origin.default.name
  header_action {
    response_header_to_add {
      # Return the country (or region) associated with the client's IP address.
      header_name  = "client-geo"
      header_value = "{client_region}"
      replace      = true
    }
    request_header_to_add {
      # Inform the upstream origin server that the request is from Media CDN.
      header_name  = "x-downstream-cdn"
      header_value = "Media CDN"
    }
    response_header_to_remove {
      header_name = "X-User-ID"
    }
    response_header_to_remove {
      header_name = "X-Other-Internal-Header"
    }
  }
}

בדוגמה הזו:

  • הוספת כותרת 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

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

תשובות בלי כותרת age לא מוצגות מהמטמון.

server ההגדרה היא Google-Edge-Cache.
cdn-loop

מזהה לולאות – למשל, אם המארח המקורי זהה למארח שפונה למשתמש (קצה).

טוקן של google מצורף לכותרת בהתאם ל-RFC 8586. אי אפשר לשנות את הטוקן.

forwarded

הגרסה המובנית של הכותרת x-forwarded-for. הכותרת forwarded מוגדרת ב-RFC 7239.

הכותרות האלה מאפשרות לכם לזהות את כתובת ה-IP של הלקוח המתחבר כששרת Proxy אחד או יותר נמצאים בנתיב. לדוגמה, אם לקוח עם כתובת ה-IP‏ 192.0.2.60 מתחבר ל-Media CDN באמצעות HTTPS, הכותרת forwarded מתמלאת באופן הבא:

forwarded: [for=192.0.2.60;proto=https]

במקרה של כמה שרתי proxy בצד הלקוח, הלקוח שהתחבר ל-Media CDN הוא הכתובת האחרונה שמצורפת לערך הכותרת.

x-forwarded-for

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

שתי הכותרות נשלחות בבקשה לתמיכה במקורות מדור קודם שאולי לא מכירים את הכותרת forwarded.

המפתחות של הכותרות הם באותיות קטנות גם בכותרות של הבקשות וגם בכותרות של התגובות, כי המפתחות של הכותרות הם לא תלויי-רישיות.

אפשר להוסיף כותרות אחרות, כולל המיקום של נקודת הנוכחות (PoP) בקצה וסטטוס המטמון (כמו hit ו-miss), באמצעות משתני כותרת דינמיים.