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:
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:
-
Erstellen Sie Ursprungsgruppen: Erstellen Sie eine Ursprungsgruppe
-
Funktionsweise von Origin Failover mit Lambda@Edge: Verwenden von Origin Failover mit Lambda@Edge-Funktionen
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. Durch das Generieren von HTTP Antworten wird die Belastung des Ursprungs reduziert und in der Regel auch die Latenz für den Betrachter verringert.
Zu den gängigen Szenarien für HTTP die Generierung von Antworten gehören 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 Betrachter, 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.
-
Einen Beispielcode für die Generierung von HTTP Antworten finden Sie unterBeispielfunktionen für Lambda@Edge. Sie können die HTTP Antworten auch in Antwortauslösern ersetzen. Weitere Informationen finden Sie unter HTTPAntworten in den ursprünglichen Antwortauslösern aktualisieren.
Programmiermodell
In diesem Abschnitt wird das Programmiermodell für die Verwendung von Lambda @Edge zur Generierung von HTTP Antworten beschrieben.
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 sindtext
undbase64
. Wenn Siebody
in dasresponse
Objekt aufnehmen, aber weglassenbodyEncoding
, wird der CloudFront Hauptteil als Text behandelt.Wenn Sie
bodyEncoding
als angeben, derbase64
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:
-
Bei den Schlüsseln im
headers
Objekt handelt es sich um Kleinbuchstaben von HTTP Standard-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"]
oderheaders["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 Name des Headers, bei dem die Groß- und Kleinschreibung beachtet wird, so wie er in einer HTTP Anfrage erscheint,accept
z. B. 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
-
Der HTTP Statuscode. Geben Sie den Statuscode als Zeichenfolge an. CloudFront verwendet den bereitgestellten Statuscode für Folgendes:
-
Rückgabe in der Antwort
-
Cache im CloudFront Edge-Cache, wenn die Antwort durch eine Funktion generiert wurde, die durch ein Origin-Request-Ereignis ausgelöst wurde
-
Loggen Sie sich ein CloudFront Standardprotokolle (Zugriffsprotokolle) konfigurieren und verwenden
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 von 200.
Fehler
Im Folgenden sind mögliche Fehler bei generierten HTTP Antworten aufgeführt.
Antwort enthält einen Body und legt 204 (No Content) als Status fest
-
Wenn eine Funktion durch eine Viewer-Anfrage ausgelöst wird, wird ein HTTP 502-Statuscode (Bad Gateway) an den Viewer CloudFront zurückgegeben, wenn beide der folgenden Bedingungen zutreffen:
-
Der Wert von
status
ist 204 (No Content) -
Die Antwort enthält einen Wert für
body
Dies liegt daran, dass Lambda @Edge die optionale Einschränkung aus RFC 2616 auferlegt, die besagt, dass eine
HTTP 204
Antwort keinen Nachrichtentext enthalten muss. -
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 der Statuscode HTTP 502 (Bad Gateway) an den Betrachter CloudFront zurückgegeben.
-
Pflichtfelder
Das Feld status
ist ein Pflichtfeld.
Alle anderen Felder sind optional.
HTTPAntworten in den ursprünglichen Antwortauslösern aktualisieren
Wenn eine HTTP Antwort vom Ursprungsserver CloudFront empfangen wird und ein Origin-Response-Trigger mit dem Cache-Verhalten verknüpft ist, können Sie die HTTP Antwort so ändern, dass die vom ursprünglichen Server zurückgegebenen Antworten außer Kraft gesetzt werden.
Zu den gängigen Szenarien für die Aktualisierung von HTTP Antworten gehören die folgenden:
-
Änderung des Status, sodass ein Statuscode HTTP 200 festgelegt wird, und statischer Textinhalt erstellt, der zum Viewer zurückkehrt, wenn ein Origin einen Fehlerstatuscode (4xx oder 5xx) zurückgibt. Einen Beispiel-Code finden Sie unter Beispiel: Verwenden Sie einen Origin-Response-Trigger, um den Fehlerstatuscode auf 200 zu aktualisieren.
-
Änderung des Status, sodass ein HTTP HTTP 301- oder 302-Statuscode festgelegt wird, um den Benutzer auf eine andere Website umzuleiten, wenn ein Origin einen Fehlerstatuscode (4xx oder 5xx) zurückgibt. Einen Beispiel-Code finden Sie unter Beispiel: Verwenden Sie einen Origin-Response-Trigger, um den Fehlerstatuscode auf 302 zu aktualisieren.
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 die HTTP Antworten auch in den Ereignissen Viewer und Origin Request ersetzen. Weitere Informationen finden Sie unter Generieren Sie HTTP Antworten in Anforderungsauslösern.
Wenn Sie mit der HTTP Antwort arbeiten, macht Lambda @Edge den vom Ursprungsserver zurückgegebenen Text nicht dem Origin-Response-Trigger zugänglich. 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 Anfragetext zu, indem Sie die Option „Text einschließen“ wählen
Sie können sich dafür entscheiden, dass Lambda @Edge den Hauptteil in einer Anfrage für beschreibbare HTTP Methoden (POST, PUTDELETE, usw.) verfügbar macht, 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 Trigger 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“.