Regions-ID
REGION_ID
ist ein abgekürzter Code, den Google anhand der Region zuweist, die Sie beim Erstellen Ihrer Anwendung ausgewählt haben. Der Code bezieht sich nicht auf ein Land oder eine Provinz, auch wenn einige Regions-IDs häufig verwendeten Länder- und Provinzcodes ähneln können. Bei Anwendungen, die nach Februar 2020 erstellt wurden, ist REGION_ID.r
in den App Engine-URLs enthalten. Bei Anwendungen, die vor diesem Datum erstellt wurden, ist die Regions-ID in der URL optional.
Auf dieser Referenzseite finden Sie Details dazu, welche HTTP-Header unterstützt werden, sowie zu den Limits für Anfragen und Antworten in App Engine. Informationen dazu, wie App Engine Anfragen empfängt und Antworten sendet, finden Sie unter Anfrageverarbeitung.
Anfrageheader
Eine eingehende HTTP-Anfrage enthält die HTTP-Header, die vom Client gesendet werden. Einige Header werden aus Sicherheitsgründen von zwischengeschalteten Proxys bereinigt, berichtigt oder entfernt, bevor sie die Anwendung erreichen.
Aus eingehenden Anfragen entfernte Header
Folgende Header werden aus eingehenden Anfragen entfernt, wenn ein Client sie sendet:
Header mit Namen, die dem Muster
X-Google-*
entsprechen. Dieses Namensmuster ist für Google reserviert.Header mit Namen, die einem App Engine-spezifischen Header entsprechen. Es werden nur exakte Übereinstimmungen entfernt, wobei die Groß- / Kleinschreibung nicht berücksichtigt wird. Beispiel: Header mit dem Namen
X-Appengine-Country
oderX-AppEngine-Country
werden entfernt,X-Appengine-Cntry
jedoch nicht.
Accept-Encoding
Connection
Keep-Alive
Proxy-Authorization
TE
Trailer
Transfer-Encoding
Beispielsweise kann der Server abhängig vom Wert des Anfrageheaders Accept-Encoding
automatisch eine mit gzip komprimierte Antwort senden. Die Anwendung selbst muss nicht wissen, welche Inhaltscodierungen der Client akzeptieren kann.
Anfragen und WSGI
Durch Vergleich der URL der Anfrage mit den URL-Mustern in der Konfigurationsdatei der Anwendung ermittelt der Server, welches Python-Anwendungsobjekt aufgerufen werden soll. Anschließend wird das Anwendungsobjekt mit den im WSGI-Standard definierten Argumenten aufgerufen. Das Anwendungsobjekt führt je nach Anfrage die entsprechenden Aktionen durch, bereitet dann eine Antwort vor und gibt sie als eine Liste von Strings zurück.
Die meisten Anwendungen verwenden ein Framework wie webapp2 zur Verarbeitung von WSGI-Anfragen.
webapp2
ist Bestandteil der Python 2.7-Laufzeit.
Anfragen und CGI
Durch Vergleich der URL der Anfrage mit den URL-Mustern in der Konfigurationsdatei der Anwendung ermittelt der Server, welches Python-Handler-Skript aufgerufen werden soll. Anschließend wird das Skript in einer Umgebung ausgeführt, die mit den Anfragedaten gefüllt ist. Wie im CGI-Standard beschrieben, fügt der Server die Anfragedaten in Umgebungsvariablen und in den Standardeingabestream ein. Das Skript führt die der Anfrage entsprechenden Aktionen aus und bereitet eine Antwort vor, die in den Standardausgabestream geschrieben wird.
Die meisten Anwendungen verwenden eine Bibliothek zum Parsen von CGI-Anfragen und zum Zurückgeben von CGI-Antworten, z. B. das cgi-Modul aus der Python-Standardbibliothek, oder ein Web-Framework, das das CGI-Protokoll kennt (z. B. webapp). Weitere Informationen zu den Umgebungsvariablen und zum Format der Eingabestreamdaten finden Sie in der CGI-Dokumentation.
App Engine-spezifische Header
App Engine fügt als Dienst für die Anwendung allen Anfragen die folgenden Header hinzu:
X-Appengine-Country
- : Das Land, aus dem die Anfrage stammt, als Ländercode gemäß ISO 3166-1 Alpha-2.
App Engine ermittelt diesen Code anhand der IP-Adresse des Clients. Beachten Sie, dass die Länderinformationen nicht aus der WHOIS-Datenbank stammen. Es kann sein, dass eine IP-Adresse mit Länderinformationen in der WHOIS-Datenbank keine Länderinformationen im Header
X-Appengine-Country
enthält. Ihre Anwendung sollte den speziellen LändercodeZZ
(Land unbekannt) verarbeiten können. X-Appengine-Region
- : Der Name der Region, aus der die Anfrage stammt. Die Interpretation dieses Werts hängt von dem unter
X -Appengine-Country
angegebenen Land ab. Wenn als Land z. B. "US" und als Region "ca" angegeben ist, steht "ca" für "Kalifornien", nicht für Kanada. Die vollständige Liste der gültigen Regionenwerte finden Sie in der Norm ISO 3166-2. X-Appengine-City
- Der Name der Stadt, aus der die Anfrage stammt. So kann z. B. eine Anfrage aus der Stadt Mountain View den Header-Wert
mountain view
enthalten. Für diesen Header gibt es keine offizielle Liste gültiger Werte. X-Appengine-CityLatLong
- Der Breiten- und Längengrad der Stadt, aus der die Anfrage stammt. Für eine Anfrage aus Mountain View könnte dieser String etwa "37.386051,-122.083851" lauten.
X-Cloud-Trace-Context
- Eine eindeutige Kennung für die Anfrage, die für Cloud Trace und Cloud Logging verwendet wird. Es gibt keine Möglichkeit, diesen Header zu deaktivieren oder die Abtastrate für das Tracing auszuwählen, da alle App Engine-Standardumgebungsanwendungen automatisch verfolgt werden.
X-Forwarded-For: [CLIENT_IP(s)], [global forwarding rule IP]
Eine durch Kommas getrennte Liste von IP-Adressen, über die die Clientanfrage weitergeleitet wurde. Die erste IP-Adresse in dieser Liste ist normalerweise die IP-Adresse des Clients, der die Anfrage erstellt hat. Die folgenden IP-Adressen enthalten Informationen über die Proxyserver, die ebenfalls die Anfrage verarbeitet haben, bevor sie den Anwendungsserver erreicht hat. Beispiel:
X-Forwarded-For: clientIp, proxy1Ip, proxy2Ip
X-Forwarded-Proto [http | https]
Zeigt
http
oderhttps
je nach dem Protokoll, das der Client für die Verbindung mit der Anwendung verwendet hat.Der Google Cloud Load Balancer beendet alle
https
-Verbindungen und leitet dann überhttp
den Traffic an App Engine-Instanzen weiter. Beispiel: Wenn ein Nutzer überhttps://PROJECT_ID.REGION_ID.r.appspot.com
Zugriff auf Ihre Website anfordert, ist der Wert des "X-Forwarded-Proto"-Headershttps
.
Darüber hinaus kann App Engine folgende Header für die interne Verwendung durch App Engine festlegen:
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
Für
login:admin
- oderlogin:required
-Handler, die inapp.yaml
angegeben sind, fügt App Engine den folgenden Satz Header hinzu:X-Appengine-User-Email
, mit Beispielheader: "ange@example.com"X-Appengine-Auth-Domain
, mit Beispielheader: "example.com"X-Appengine-User-ID
, mit Beispielheader: "100979712376541954724"X-Appengine-User-Nickname
, mit Beispielheader: "ange"X-Appengine-User-Organization
, mit Beispielheader: "example.com"X-Appengine-User-Is-Admin
, mit Beispielheader: "1"
Der Dienst für Aufgabenwarteschlangen fügt Anfragen zusätzliche Header hinzu, die Details zur Aufgabe in der Anfrage und zur zugehörigen Warteschlange enthalten.
Anfragen vom Cron-Dienst fügen folgenden Header hinzu:
X-Appengine-Cron: true
Weitere Informationen finden Sie unter URLs für Cron sichern.
Anfragen von anderen App Engine-Anwendungen enthalten einen Header, mit dem die Anwendung identifiziert wird, von der die Anfrage gesendet wird, sofern die anfragende Anwendung den URL-Abrufdienst verwendet:
X-Appengine-Inbound-Appid
Weitere Informationen finden Sie in der Dokumentation zu App Identity.
Antworten auf Anfragen
Diese HTTP-Headerdokumentation gilt nur für Antworten auf eingehende HTTP-Anfragen. Die Antwort wird unter Umständen geändert, bevor sie zurück an den Client geht. Informationen zu HTTP-Headern für ausgehende Anfragen, die aus Ihrem App Engine-Code stammen, finden Sie in der Headerdokumentation zu URLFetch.
Entfernte Header
Die folgenden Header werden ignoriert und aus der Antwort entfernt:
Connection
Content-Encoding
*Content-Length
Date
Keep-Alive
Proxy-Authenticate
Server
Trailer
Transfer-Encoding
Upgrade
* Kann neu hinzugefügt werden, wenn die Antwort von App Engine komprimiert wird.
Header mit Nicht-ASCII-Zeichen im Namen oder Wert werden ebenfalls entfernt.
Hinzugefügte oder ersetzte Header
Die folgenden Header werden in der Antwort hinzugefügt oder ersetzt:
Cache-Control
,Expires
undVary
Diese Header bestimmen Caching-Richtlinien für zwischengeschaltete Webproxys (wie das Google Front-End und Internet Service Provider) und Browser. Wenn Ihre App diese Antwortheader festlegt, bleiben sie in der Regel unverändert, es sei denn, Ihre App legt auch einen
Set-Cookie
-Header fest oder die Antwort wird für einen Nutzer generiert, der mit einem Administratorkonto angemeldet ist.Wenn Ihre Anwendung einen
Set-Cookie
-Antwortheader festlegt, wird der HeaderCache-Control
aufprivate
gesetzt (wenn nicht schon eine restriktivere Einstellung ausgewählt ist) und der HeaderExpires
wird auf das aktuelle Datum gesetzt (wenn nicht bereits ein vergangenes Datum angegeben ist). Das sorgt in der Regel dafür, dass die Antwort in Browsern, nicht jedoch in zwischengeschalteten Proxyservern im Cache gespeichert werden kann. Dies geschieht aus Sicherheitsgründen: Bei einer öffentlich im Cache gespeicherten Antwort könnte ein anderer Nutzer dieselbe Ressource noch einmal anfordern und das Cookie des ersten Nutzers abrufen.Wenn Sie ein WebOb-basiertes Framework (wie webapp oder webapp2) verwenden, legt das Framework den
Cache-Control
-Header standardmäßig aufno-cache
fest. Sie müssen ihn daher überschreiben, wenn Sie ein Caching in Ihren Skript-Handlern verwenden.Legt Ihre Anwendung den Antwortheader
Cache-Control
nicht fest, kann der Server diesen aufprivate
setzen und einenVary: Accept-Encoding
-Header hinzufügen.Weitere Informationen zum Caching, einschließlich der Liste von
Vary
-Werten, die vom Google Front-End unterstützt werden, finden Sie unter Antwort-Caching.Content-Encoding
Abhängig von den Anfrageheadern und dem
Content-Type
der Antwort kann der Server den Antworttext wie oben beschrieben automatisch komprimieren. In diesem Fall wird der HeaderContent-Encoding: gzip
hinzugefügt, um zu zeigen, dass der Text komprimiert ist. Weitere Informationen finden Sie im Abschnitt zur Antwortkomprimierung.Content-Length
oderTransfer-Encoding
Der Server ignoriert immer den von der Anwendung zurückgegebenen Header
Content-Length
. Der Server setztContent-Length
entweder auf die Länge des Texts (ggf. nach der Komprimierung) oder löschtContent-Length
und verwendet die aufgeteilte Transfercodierung (durch Hinzufügen des HeadersTransfer-Encoding: chunked
).Content-Type
Falls nicht von der Anwendung angegeben, wird vom Server der Standardheader
Content-Type: text/html
festgelegt.Date
Wird auf das aktuelle Datum und die aktuelle Uhrzeit eingestellt.
Server
Legen Sie
Google Frontend
fest. Dieser Wert wird durch den Entwicklungsserver aufDevelopment/x
gesetzt, wobei x für die Versionsnummer steht.
Wenn Sie auf dynamische Seiten Ihrer Website zugreifen, während Sie mit einem Administratorkonto angemeldet sind, fügt App Engine anfragebezogene Statistiken in die Antwortheader ein:
X-Appengine-Resource-Usage
- : Die von der Anfrage genutzten Ressourcen, einschließlich der serverseitigen Zeit in Millisekunden.
Antworten mit Statistiken zur Ressourcennutzung können nicht im Cache gespeichert werden.
Wenn der Header X-Appengine-BlobKey
in der Antwort der Anwendung enthalten ist, wird er zusammen mit dem optionalen Header X-Appengine-BlobRange
verwendet, um den Text durch den gesamten Inhalt oder einen Teil des Inhalts eines Blobstore-Blobs zu ersetzen. Wenn Content-Type
nicht von der Anwendung angegeben ist, gilt der MIME-Typ des Blobs. Wenn ein Bereich angefordert wird, ändert sich der Antwortstatus in 206 Partial Content
und ein Header Content-Range
wird hinzugefügt. Die Header X-Appengine-BlobKey
und X-Appengine-BlobRange
werden aus der Antwort entfernt. Normalerweise müssen Sie diese Header nicht selbst festlegen, da sie durch die Klasse blobstore_handlers.BlobstoreDownloadHandler
festgelegt werden. Weitere Informationen finden Sie unter Blobs bereitstellen.
In der Anwendungskonfiguration festgelegte Antwortheader
Benutzerdefinierte HTTP-Antwortheader für dynamische und statische Pfade können in der Konfigurationsdatei Ihrer Anwendung pro URL festgelegt werden. Weitere Informationen finden Sie in den Abschnitten http_headers
der Dokumentation zur Konfiguration.