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. 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, wird die Antwort an den Betrachter CloudFront zurückgegeben und nicht zwischengespeichert.

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 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:

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

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:

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“.