Arbeiten Sie mit Anfragen und Antworten - Amazon CloudFront

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Arbeiten Sie mit Anfragen und Antworten

Informationen zur Verwendung von Lambda @Edge -Anfragen und -Antworten finden Sie in den folgenden Themen:

Verwenden Sie Lambda @Edge -Funktionen mit Origin-Failover

Sie können Lambda @Edge -Funktionen mit CloudFront Distributionen verwenden, die Sie mit Ursprungsgruppen eingerichtet haben, z. B. für Origin-Failover, das Sie konfigurieren, um eine hohe Verfügbarkeit sicherzustellen. Um eine Lambda-Funktion mit einer Ursprungsgruppe zu verwenden, geben Sie die Funktion in einem Ursprungsanfragen- oder Ursprungsantwort-Auslöser für eine Ursprungsgruppe an, wenn Sie das Zwischenspeicher-Verhalten erstellen.

Weitere Informationen finden Sie hier:

Generieren Sie HTTP-Antworten in Anforderungsauslösern

Wenn Sie CloudFront eine Anfrage erhalten, können Sie eine Lambda-Funktion verwenden, um eine HTTP-Antwort zu generieren, die direkt an den Betrachter CloudFront zurückkehrt, ohne die Antwort an den Ursprung weiterzuleiten. Die Generierung von HTTP-Antworten reduziert die Auslastung des Ursprungs und reduziert in der Regel auch die Latenzzeit für den Viewer.

Einige häufige Szenarien für die Generierung von HTTP-Antworten sind die folgenden:

  • Rückgabe einer kleinen Website an den Viewer.

  • Rückgabe eines HTTP 301- oder 302-Statuscodes, um den Benutzer auf eine andere Webseite umzuleiten.

  • Rückgabe eines HTTP 401-Statuscodes an den Viewer, wenn sich der Benutzer nicht authentifiziert hat.

Eine Lambda @Edge -Funktion kann eine HTTP-Antwort generieren, wenn die folgenden CloudFront Ereignisse eintreten:

Viewer-Anforderungsereignisse

Wenn eine Funktion durch ein Viewer-Anforderungsereignis ausgelöst wird, CloudFront gibt sie die Antwort an den Betrachter zurück und speichert sie nicht im Cache.

Ursprungsanforderungsereignisse

Wenn eine Funktion durch ein Origin-Anforderungsereignis ausgelöst wird, CloudFront wird im Edge-Cache nach einer Antwort gesucht, die zuvor von der Funktion generiert wurde.

  • Wenn sich die Antwort im Cache befindet, wird die Funktion nicht ausgeführt und CloudFront gibt die zwischengespeicherte Antwort an den Viewer zurück.

  • Wenn sich die Antwort nicht im Cache befindet, wird die Funktion ausgeführt, die Antwort wird an den Viewer CloudFront zurückgegeben und auch zwischengespeichert.

Beispiel-Code zum Generieren von HTTP-Antworten finden Sie unter Beispielfunktionen für Lambda@Edge. Sie können auch die HTTP-Antworten in Antwortauslösern ersetzen. Weitere Informationen finden Sie unter Aktualisieren Sie die HTTP-Antworten in den ursprünglichen Antwortauslösern.

Programmiermodell

Dieser Abschnitt enthält Informationen über das Programmiermodell für die Nutzung von Lambda@Edge zum Generieren von HTTP-Antworten.

Antwortobjekt

Die Antwort, die Sie als result-Parameter der callback-Methode zurückgeben, sollte folgenden Aufbau haben (beachten Sie, dass nur das status-Feld erforderlich ist).

const response = { body: 'content', bodyEncoding: 'text' | 'base64', headers: { 'header name in lowercase': [{ key: 'header name in standard case', value: 'header value' }], ... }, status: 'HTTP status code (string)', statusDescription: 'status description' };

Das Antwortobjekt kann die folgenden Werte enthalten:

body

Der Text, falls vorhanden, den Sie in der generierten Antwort zurückgeben CloudFront möchten.

bodyEncoding

Die Kodierung für den Wert, den Sie in body festgelegt haben. Die einzigen gültigen Codierungen sind text und base64. Wenn Sie body in das response Objekt aufnehmen, aber weglassenbodyEncoding, wird der CloudFront Hauptteil als Text behandelt.

Wenn Sie bodyEncoding als angeben, der base64 Hauptteil aber nicht gültig ist, wird base64 CloudFront zurückgegeben, wird ein Fehler zurückgegeben.

headers

Header, die Sie in der generierten Antwort zurückgeben möchten CloudFront . Beachten Sie Folgendes:

  • Die Schlüssel im headers-Objekt sind kleingeschriebene Versionen von Standard-HTTP-Header-Namen. Über diese Kleinbuchstaben-Schlüssel haben Sie Zugriff auf die Headerwerte (ohne Berücksichtigung von Groß-/Kleinschreibung).

  • Jeder Header (z. B. headers["accept"] oder headers["host"]) ist ein Array mit Schlüssel-Wert-Paaren. Für einen bestimmten Header enthält das Array ein Schlüssel-Wert-Paar für jeden Wert in der generierten Antwort.

  • key (optional) ist der von Groß- und Kleinschreibung unabhängige Name des Headers, wie er in einer HTTP-Anforderung erscheint (z. B. accept oder host).

  • Geben Sie value als Header-Wert an.

  • Wenn Sie den Header-Schlüsselteil des Schlüssel-Wert-Paares nicht aufnehmen, fügt Lambda@Edge automatisch einen Header-Schlüssel mit dem von Ihnen angegebenen Header-Namen ein. Unabhängig davon, wie Sie den Header-Namen formatiert haben, wird der automatisch eingefügte Header-Schlüssel mit einem großen Anfangsbuchstaben für jeden Teil formatiert, wobei die einzelnen Teile durch Bindestriche (-) getrennt werden.

    Beispielsweise können Sie einen Header wie den folgenden ohne Header-Schlüssel hinzufügen: 'content-type': [{ value: 'text/html;charset=UTF-8' }]

    In diesem Beispiel erstellt Lambda@Edge den folgenden Header-Schlüssel: Content-Type.

Weitere Informationen zu Einschränkungen zur Verwendung von Headern finden Sie unter Einschränkungen für Edge-Funktionen.

status

Den HTTP-Statuscode . Geben Sie den Statuscode als Zeichenfolge an. CloudFront verwendet den bereitgestellten Statuscode für Folgendes:

Wenn der status Wert nicht zwischen 200 und 599 liegt, wird ein Fehler an den Viewer CloudFront zurückgegeben.

statusDescription

Die Beschreibung, die CloudFront Sie zusammen mit dem HTTP-Statuscode in der Antwort zurückgeben möchten. Sie müssen keine Standardbeschreibungen verwenden (z. B. OK für einen HTTP-Statuscode 200).

Fehler

Es folgen mögliche Fehler für generierte HTTP-Antworten.

Antwort enthält einen Body und legt 204 (No Content) als Status fest

Wenn eine Funktion durch eine Viewer-Anfrage ausgelöst wird, CloudFront gibt sie dem Viewer einen HTTP 502-Statuscode (Bad Gateway) zurück, wenn beide der folgenden Bedingungen zutreffen:

  • Der Wert von status ist 204 (No Content)

  • Die Antwort enthält einen Wert für body

Der Grund hierfür ist, dass Lambda@Edge eine optionale Einschränkung aus RFC 2616 umsetzt, die besagt, dass eine HTTP 204-Antwort keinen Nachrichtentext zu enthalten braucht.

Beschränkungen für die Größe der generierten Antwort

Die maximale Größe einer durch eine Lambda-Funktion generierten Antwort hängt von dem Ereignis ab, das die Funktion ausgelöst hat:

  • Viewer-Anfrage-Ereignisse – 40 KB

  • Ursprungsanfrageereignisse – 1 MB

Wenn die Antwort größer als die zulässige Größe ist, wird ein HTTP 502-Statuscode (Bad Gateway) an den Betrachter CloudFront zurückgegeben.

Pflichtfelder

Das Feld status ist ein Pflichtfeld.

Alle anderen Felder sind optional.

Aktualisieren Sie die HTTP-Antworten in den ursprünglichen Antwortauslösern

Wenn eine HTTP-Antwort vom Ursprungsserver CloudFront empfängt und dem Cache-Verhalten ein Origin-Response-Trigger zugeordnet ist, können Sie die HTTP-Antwort so ändern, dass die vom Ursprung zurückgegebenen Antworten außer Kraft gesetzt werden.

Einige häufige Szenarien für die Aktualisierung von HTTP-Antworten sind die folgenden:

Anmerkung

Die Funktion muss einen Statuswert zwischen 200 und 599 (einschließlich) zurückgeben, andernfalls CloudFront gibt sie einen Fehler an den Viewer zurück.

Sie können auch die HTTP-Antworten in Viewer- und Ursprungsanfrageereignissen ersetzen. Weitere Informationen finden Sie unter Generieren Sie HTTP-Antworten in Anforderungsauslösern.

Wenn Sie mit der HTTP-Antwort arbeiten, stellt Lambda@Edge den Textkörper, der vom Ursprungsserver zurückgegeben wird, nicht für den Ursprungsantwortauslöser bereit. Sie können einen statischen Inhaltstext erzeugen, indem Sie ihn auf den gewünschten Wert setzen, oder den Text innerhalb der Funktion entfernen, indem Sie den Wert auf leer setzen. Wenn Sie das Textkörperfeld in Ihrer Funktion nicht aktualisieren, wird der ursprüngliche Textkörper, der vom Ursprungsserver zurückgegeben wird, an den Viewer zurückgegeben.

Greifen Sie auf den Anforderungstext zu, indem Sie die Option „Text einbeziehen“ wählen

Sie können jetzt auswählen, ob Lambda@Edge den Textkörper in einer Anforderung für eine nicht schreibgeschützte HTTP-Methode (POST, PUT, DELETE etc.) weitergeben soll, sodass Sie in Ihrer Lambda-Funktion darauf zugreifen können. Sie können den Lesezugriff wählen oder angeben, dass Sie den Textkörper ersetzen möchten.

Um diese Option zu aktivieren, wählen Sie „Text einbeziehen“, wenn Sie einen CloudFront Auslöser für Ihre Funktion erstellen, der für eine Viewer-Anfrage oder ein Origin-Request-Ereignis bestimmt ist. Weitere Informationen finden Sie unter Trigger für eine Lambda @Edge -Funktion hinzufügen. Mehr zur Nutzung von Include Body (Textkörper einbeziehen) mit Ihrer Funktion finden Sie unter Lambda@Edge-Ereignisstruktur.

Sie können dieses Feature in den folgenden Szenarien nutzen:

  • Verarbeitung von Webformularen (z. B. "Kontakt"-Formulare) ohne Rückgabe von Kundeneingabedaten an den Ursprungs-Server

  • Erfassen von Web-Beacon-Daten, die von Viewer-Browsern gesendet werden, und Verarbeiten am Edge

Einen Beispiel-Code finden Sie unter Beispielfunktionen für Lambda@Edge.

Anmerkung

Wenn der Anforderungs-Body groß ist, wird er von Lambda@Edge abgeschnitten. Ausführliche Informationen zur maximalen Größe und Kürzung finden Sie unter Einschränkungen für Anforderungstext mit der Option „Text einschließen“.