מזהה אזור
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לא יוסרו.
Accept-EncodingConnectionKeep-AliveProxy-AuthorizationTETrailerTransfer-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, proxy2IpX-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-HttpsX-Appengine-User-IPX-Appengine-Api-TicketX-Appengine-Request-Log-IdX-Appengine-Default-Version-HostnameX-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 נכנסות. יכול להיות שהתשובה תעבור שינוי לפני שהיא תוחזר ללקוח.
הכותרות הוסרו
המערכת מתעלמת מהכותרות הבאות ומסירה אותן מהתגובה:
ConnectionContent-Encoding*Content-LengthDateKeep-AliveProxy-AuthenticateServerTrailerTransfer-EncodingUpgrade
* יכול להיות שיתווסף מחדש אם התגובה תכווץ על ידי 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 במסמכי ההגדרה.