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

מזהה אזור

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" לבקשה מ-Mountain View. אם אי אפשר לזהות את העיר, ערך הכותרת מוגדר כ-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 במסמכי ההגדרה.