Anfrageheader und Antworten

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 oder berichtigt, bevor sie die Anwendung erreichen.

Entfernte Header

Die folgenden Header werden aus der Anfrage entfernt:

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

Darüber hinaus wird der Header Strict-Transport-Security aus Anfragen entfernt, die an andere Domains als appspot.com oder *.appspot.com gesendet werden.

Diese Header beziehen sich auf die Übertragung der HTTP-Daten zwischen dem Client und dem Server und sind für die Anwendung transparent. 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ändercode ZZ (Land unbekannt) verarbeiten können.
X-AppEngine-Region
Der Name der Region, aus der die Anfrage stammt. Dieser Wert kann nur in Verbindung mit dem Land in X -AppEngine-Country interpretiert werden. Wenn als Land z. B. "USA" und als Region "ca" festgelegt 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. Eine Anfrage aus der Stadt Mountain View könnte zum Beispiel den Headerwert 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.
Python unterstützt die gleiche Reihe von eingehenden HTTP-Headern wie oben aufgeführt. Dazu gehören unter anderem:

  • X-AppEngine-Https, mit Beispielheader: "off"
  • X-AppEngine-User-IP, mit Beispielheader: "2602:306:3429:520:501f:4a71:9d2c:be5f"
  • X-Cloud-Trace-Context, mit Beispielheader: "18ff88cd7f38ff2bf9b79443..."

Für die Handler login:admin oder login:required, die in app.yaml angegeben sind, bietet App Engine auch folgende Header:

  • 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"

Von App Engine-Diensten werden ggf. zusätzliche Anfrageheader hinzugefügt:

  • Anfragen vom Cron-Dienst enthalten auch einen HTTP-Header:

    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:

    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.

Darüber hinaus wird der Header Strict-Transport-Security aus Antworten entfernt, die von anderen Domains als *.appspot.com gesendet werden.

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 und Vary

Diese Header geben Caching-Richtlinien für zwischengeschaltete Webproxys (wie Internetanbieter) und Browser vor. Wenn diese Header in Ihrem Skript festgelegt werden, bleiben sie normalerweise unverändert, es sei denn, die Antwort hat einen Set-Cookie-Header oder wird für einen Nutzer erzeugt, der mit einem Administratorkonto angemeldet ist. Statische Handler legen diese Header gemäß den Vorgaben in der Konfigurationsdatei fest. Wenn Sie keinen Wert für Cache-Control angeben, kann der Server diesen auf private setzen und den Header Vary: Accept-Encoding hinzufügen.

Bei einem Set-Cookie-Antwortheader wird der Header Cache-Control auf private gesetzt (wenn nicht schon eine restriktivere Einstellung ausgewählt ist) und der Header Expires wird auf das aktuelle Datum gesetzt (wenn nicht schon 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.

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 Header Content-Encoding: gzip hinzugefügt, um anzuzeigen, dass der Text komprimiert ist. Weitere Informationen finden Sie im Abschnitt zur Antwortkomprimierung.

Content-Length oder Transfer-Encoding

Der von der Anwendung zurückgegebene Header Content-Length wird vom Server immer ignoriert. Der Server setzt Content-Length entweder auf die Länge des Texts (ggf. nach der Komprimierung) oder löscht Content-Length und verwendet die aufgeteilte Transfercodierung (durch Hinzufügen des Headers Transfer-Encoding: chunked).

Content-Type

Falls nicht von der Anwendung angegeben, wird vom Server der Standardheader Content-Type: text/html festgelegt.

Date

Stellen Sie das aktuelle Datum und die Uhrzeit ein.

Server

Wird auf Google Frontend gesetzt. Dieser Wert wird durch den Entwicklungsserver auf Development/x gesetzt, wobei x für die Versionsnummer steht.

Wenn Sie auf dynamische Seiten auf Ihrer Website zugreifen, während Sie mit einem Administratorkonto angemeldet sind, fügt App Engine anfragebezogene Statistiken in die Antwortheader ein:

X-AppEngine-Estimated-CPM-US-Dollars
Eine Schätzung der Kosten in US-Dollar, die für 1.000 vergleichbare Anfragen anfallen würden.
X-AppEngine-Resource-Usage
Die von der Anfrage verwendeten 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, wechselt der Antwortstatus zu 206 Partial Content und der 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 angeben, 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 der Konfigurationsdokumentation in den Abschnitten zu http_headers.

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

App Engine-Standardumgebung für Python 2