כותרות של בקשות ותגובות

מזהה אזור

REGION_ID הוא קוד מקוצר ש-Google מקצה על סמך האזור שבוחרים כשיוצרים את האפליקציה. הקוד לא תואם למדינה או למחוז, למרות שחלק ממזהי האזורים עשויים להיראות דומים לקודים נפוצים של מדינות ומחוזות. באפליקציות שנוצרו אחרי פברואר 2020, REGION_ID.r נכלל בכתובות URL של App Engine. באפליקציות קיימות שנוצרו לפני התאריך הזה, מזהה האזור הוא אופציונלי בכתובת ה-URL.

מידע נוסף על מזהי אזורים

בדף ההפניה הזה מפורטות כותרות ה-HTTP שנתמכות, וגם מגבלות הבקשות והתגובות ב-App Engine. כדי להבין איך App Engine מקבל בקשות ושולח תשובות, אפשר לעיין במאמר בנושא איך בקשות מטופלות.

כותרות של בקשות

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

כותרות שהוסרו מבקשות נכנסות

הכותרות הבאות מוסרות מבקשות נכנסות אם לקוח שולח אותן:

  • כותרות עם שמות שתואמים לתבנית X-Google-*. תבנית השם הזו שמורה ל-Google.

  • כותרות עם שמות שתואמים לכותרות ספציפיות ל-App Engine. רק התאמות מדויקות שלא תלויות באותיות רישיות יוסרו. לדוגמה, כותרות בשם X-Appengine-Country או X-AppEngine-Country יוסרו, אבל כותרות בשם X-Appengine-Cntry לא יוסרו.

בנוסף, הכותרות הבאות מוסרות מבקשות נכנסות כי הן קשורות להעברת נתוני ה-HTTP בין הלקוח לשרת:

  • Accept-Encoding
  • Connection
  • Keep-Alive
  • Proxy-Authorization
  • TE
  • Trailer
  • Transfer-Encoding

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

כותרות ספציפיות ל-App Engine

כחלק מהשירות לאפליקציה, App Engine מוסיף את הכותרות הבאות לכל הבקשות:

X-Appengine-Country
המדינה שממנה נשלחה הבקשה, כקוד מדינה בפורמט ISO 3166-1 alpha-2. מערכת App Engine קובעת את הקוד הזה מכתובת ה-IP של הלקוח. שימו לב שפרטי המדינה לא נלקחים ממסד הנתונים של WHOIS. יכול להיות שלכתובת IP עם פרטי מדינה במסד הנתונים של WHOIS לא יהיו פרטי מדינה בכותרת X-Appengine-Country. האפליקציה צריכה לטפל בקוד המדינה המיוחד ZZ (מדינה לא ידועה).
X-Appengine-Region
שם האזור שממנו הגיעה הבקשה. הערך הזה רלוונטי רק בהקשר של המדינה שצוינה במאפיין X -Appengine-Country. לדוגמה, אם המדינה היא 'US' והאזור הוא 'ca', האזור 'ca' הוא קליפורניה ולא קנדה. הרשימה המלאה של ערכי האזורים התקפים מופיעה בתקן ISO-3166-2.
X-Appengine-City
שם העיר שממנה נשלחה הבקשה. לדוגמה, בקשה מהעיר מאונטיין ויו עשויה לכלול את ערך הכותרת mountain view. אין רשימה קנונית של ערכים חוקיים לכותרת הזו. אם אי אפשר לזהות את העיר, ערך הכותרת מוגדר כ-?.
X-Appengine-CityLatLong
קו הרוחב וקו האורך של העיר שממנה נשלחה הבקשה. מחרוזת כזו יכולה להיראות כמו "37.386051,-122.083851" לבקשה ממאונטיין ויו. אם אי אפשר לזהות את העיר, ערך הכותרת מוגדר כ-0.000000,0.000000.
X-Cloud-Trace-Context
מזהה ייחודי של הבקשה שמשמש ל-Cloud Trace ול-Cloud Logging. אין אפשרות להשבית את הכותרת הזו או לבחור את קצב הדגימה למעקב, כי המעקב מתבצע באופן אוטומטי בכל האפליקציות בסביבה הרגילה של App Engine.
X-Forwarded-For: [CLIENT_IP(s)], [global forwarding rule IP]

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

X-Forwarded-For: clientIp, proxy1Ip, proxy2Ip
X-Forwarded-Proto [http | https]

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

מאזן העומסים של Google Cloud מפסיק את כל החיבורים של https, ואז מעביר את התנועה למופעים של App Engine דרך http. לדוגמה, אם משתמש מבקש גישה לאתר שלכם דרך https://PROJECT_ID.REGION_ID.r.appspot.com, הערך של הכותרת X-Forwarded-Proto הוא https.

בנוסף, יכול להיות ש-App Engine יגדיר את הכותרות הבאות, שמיועדות לשימוש פנימי ב-App Engine:

  • X-Appengine-Https
  • X-Appengine-User-IP
  • X-Appengine-Api-Ticket
  • X-Appengine-Request-Log-Id
  • X-Appengine-Default-Version-Hostname
  • X-Appengine-Timeout-Ms

שירותי App Engine עשויים להוסיף כותרות בקשה נוספות:

  • בקשות משירות Cron מוסיפות את הכותרת הבאה:

    X-Appengine-Cron: true

    פרטים נוספים זמינים במאמר בנושא הגנה על כתובות URL ל-cron.

  • אם אתם משתמשים בחבילת השירותים מדור קודם:

    • עבור רכיבי handler של login:admin או login:required שצוינו בקובץ app.yaml ,‏ App Engine מוסיף את קבוצת הכותרות הבאה:

      • X-Appengine-User-Email, עם כותרת לדוגמה: "ange@example.com"
      • X-Appengine-Auth-Domain,עם כותרת לדוגמה: "example.com"
      • X-Appengine-User-ID, עם כותרת לדוגמה: ‎"100979712376541954724"‎
      • X-Appengine-User-Nickname, עם כותרת לדוגמה: ange
      • X-Appengine-User-Organization, עם כותרת לדוגמה: example.com
      • X-Appengine-User-Is-Admin, עם כותרת לדוגמה: '1'
    • השירות Task Queue מוסיף כותרות נוספות לבקשות שמספקות פרטים על המשימה בבקשה, ועל התור שאליו היא משויכת.

    • בקשות שמגיעות מאפליקציות אחרות של App Engine יכללו כותרת שמזהה את האפליקציה ששולחת את הבקשה, אם האפליקציה ששולחת את הבקשה משתמשת בשירות URL Fetch:

      X-Appengine-Inbound-Appid

      פרטים נוספים מופיעים במאמרי העזרה בנושא זהות האפליקציה.

בקשת תגובות

התיעוד הזה של כותרות HTTP רלוונטי רק לתשובות לבקשות HTTP נכנסות. יכול להיות שהתשובה תשתנה לפני שהיא תוחזר ללקוח.

הכותרות הוסרו

המערכת מתעלמת מהכותרות הבאות ומסירה אותן מהתגובה:

  • Connection
  • Content-Encoding*
  • Content-Length
  • Date
  • Keep-Alive
  • Proxy-Authenticate
  • Server
  • Trailer
  • Transfer-Encoding
  • Upgrade

* יכול להיות שיתווסף מחדש אם התגובה תכווץ על ידי App Engine.

גם כותרות עם תווים שאינם מסוג ASCII בשם או בערך שלהן מוסרות.

כותרות שנוספו או הוחלפו

הכותרות הבאות מתווספות לתגובה או מוחלפות בה:

Cache-Control, Expires וגם Vary

הכותרות האלה מציינות מדיניות שמירה במטמון לשרתי proxy באינטרנט (כמו קצה קדמי של Google וספקי אינטרנט) ולדפדפנים. אם האפליקציה שלכם מגדירה את כותרות התגובה האלה, הן בדרך כלל לא ישתנו, אלא אם האפליקציה מגדירה גם כותרת Set-Cookie, או שהתגובה נוצרת עבור משתמש שמחובר באמצעות חשבון אדמין.

אם האפליקציה מגדירה כותרת תגובה Set-Cookie, הכותרת Cache-Control תוגדר לערך private (אם היא לא כבר מגבילה יותר) והכותרת Expires תוגדר לתאריך הנוכחי (אם היא לא כבר בעבר). בדרך כלל, ההגדרה הזו מאפשרת לדפדפנים לשמור את התגובה במטמון, אבל לא לשרתי proxy ביניים. הסיבה לכך היא שיקולי אבטחה. אם התגובה הייתה נשמרת במטמון באופן ציבורי, משתמש אחר היה יכול לבקש את אותו המשאב ולקבל את קובץ ה-Cookie של המשתמש הראשון.

אם האפליקציה לא מגדירה את כותרת התגובה Cache-Control, השרת עשוי להגדיר אותה ל-private ולהוסיף כותרת Vary: Accept-Encoding.

מידע נוסף על שמירת נתונים במטמון, כולל רשימת הערכים של Vary שנתמכים ב-Google Frontend, זמין במאמר בנושא שמירת תגובות במטמון.

Content-Encoding

בהתאם לכותרות הבקשה ולתגובה Content-Type, יכול להיות שהשרת יכווץ באופן אוטומטי את גוף התגובה, כפי שמתואר למעלה. במקרה הזה, הוא מוסיף כותרת Content-Encoding: gzip כדי לציין שגוף ההודעה דחוס. פרטים נוספים זמינים בקטע בנושא דחיסת תגובות.

Content-Length או Transfer-Encoding

השרת תמיד מתעלם מהכותרת Content-Length שהאפליקציה מחזירה. היא תגדיר את Content-Length לאורך הגוף (אחרי הדחיסה, אם הדחיסה חלה), או תמחק את Content-Length ותשתמש בקידוד העברה בחלקים (תוסיף כותרת Transfer-Encoding: chunked). אם הערך של Content-Length מוגדר בצורה שגויה בסביבות זמן ריצה מהדור השני, מערכת App Engine מחזירה תגובה מסוג 500.

Date

הגדרת התאריך והשעה הנוכחיים.

Server
הוגדר לערך Google Frontend. שרת הפיתוח מגדיר את הערך הזה ל-Development/x, כאשר x הוא מספר הגרסה.

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

X-Appengine-Resource-Usage
המשאבים שבהם נעשה שימוש בבקשה, כולל זמן בצד השרת כמספר אלפיות השנייה.

תשובות עם נתונים סטטיסטיים על השימוש במשאבים לא יישמרו במטמון.

כותרות התגובה שמוגדרות בהגדרות האפליקציה

אפשר להגדיר כותרות תגובה מותאמות אישית של HTTP לכל כתובת URL עבור נתיבים דינמיים וסטטיים בקובץ ההגדרות של האפליקציה. פרטים נוספים זמינים בקטעים http_headers במסמכי ההגדרה.