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.
CloudFront Funktionen, Ereignisstruktur
CloudFront Functions übergibt ein event
Objekt als Eingabe an Ihren Funktionscode, wenn die Funktion ausgeführt wird. Wenn Sie eine Funktion testen, erstellen Sie das event
-Objekt und übergeben es an Ihre Funktion. Wenn Sie ein event
-Objekt zum Testen einer Funktion erstellen, können Sie die Felder distributionDomainName
, distributionId
und requestId
im context
-Objekt weglassen. Stellen Sie sicher, dass die Namen der Header in Kleinbuchstaben geschrieben sind, was bei dem event
Objekt, das CloudFront Functions in der Produktion an Ihre Funktion weitergibt, immer der Fall ist.
Im Folgenden wird ein Überblick über die Struktur dieses Ereignisobjekts gegeben.
{ "version": "1.0", "context": { <context object> }, "viewer": { <viewer object> }, "request": { <request object> }, "response": { <response object> } }
Weitere Informationen finden Sie unter den folgenden Themen:
Themen
Feld Version
Das version
Feld enthält eine Zeichenfolge, die die Version des CloudFront Functions-Ereignisobjekts angibt. Die aktuelle Version ist 1.0
.
Context-Objekt
Das context
-Objekt enthält kontextbezogene Informationen über das Ereignis. Er enthält folgende Felder:
distributionDomainName
-
Der CloudFront Domänenname (z. B. d111111abcdef8.cloudfront.net) der Distribution, die dem Ereignis zugeordnet ist.
distributionId
-
Die ID der Distribution (z. B. EXAMPLE), die dem Ereignis zugeordnet ist. EDFDVBD6
eventType
-
Der Ereignistyp, entweder
viewer-request
oderviewer-response
. requestId
-
Eine Zeichenfolge, die eine CloudFront Anfrage (und die zugehörige Antwort) eindeutig identifiziert.
Betrachterobjekt
Das viewer
-Objekt enthält ein ip
-Feld, dessen Wert die IP-Adresse des Betrachters (Clients) ist, der die Anfrage gesendet hat. Wenn der Betrachter einen HTTP-Proxy oder einen Load Balancer verwendet hat, um die Anfrage zu senden, entspricht der Wert der IP-Adresse des Proxys bzw. des Load Balancers.
Objekt anfordern
Das request
Objekt enthält eine Darstellung einer viewer-to-CloudFront HTTP-Anfrage. In dem event
Objekt, das an Ihre Funktion übergeben wurde, stellt das request
Objekt die tatsächliche Anfrage dar, die vom Viewer CloudFront empfangen wurde.
Wenn Ihr Funktionscode ein request
Objekt an zurückgibt CloudFront, muss es dieselbe Struktur verwenden.
Das request
-Objekt enthält die folgenden Felder:
method
-
Die HTTP-Methode der Anforderung. Wenn Ihr Funktionscode a zurückgibt
request
, kann er dieses Feld nicht ändern. Dies ist das einzige schreibgeschützte Feld imrequest
-Objekt. uri
-
Der relative Pfad des angeforderten Objekts.
Anmerkung
Wenn Ihre Funktion den
uri
Wert ändert, gilt Folgendes:-
Der neue
uri
-Wert muss mit einem Schrägstrich (/) beginnen (/
). -
Wenn eine Funktion den
uri
-Wert ändert, ändert sie auch das Objekt, das die Betrachter anfordert. -
Wenn eine Funktion den
uri
-Wert ändert, wird weder das Cache-Verhalten für die Anforderung noch der Ursprung geändert, an den die Ursprungsanfrage weitergeleitet wird.
-
querystring
-
Ein Objekt, das die Abfragezeichenkette in der Anfrage darstellt. Wenn die Anfrage keine Abfragezeichenfolge enthält, enthält das
request
-Objekt immer noch ein leeresquerystring
-Objekt.Das
querystring
-Objekt enthält ein Feld für jeden Abfragezeichenfolgenparameter in der Anforderung. headers
-
Ein Objekt, das den HTTP-Header in der Anforderung darstellt. Wenn die Anfrage
Cookie
-Header enthält, sind diese Header nicht Teil desheaders
-Objekts. Cookies werden imcookies
-Objekt separat dargestellt.Das
headers
-Objekt enthält ein Feld für jeden Header in der Anfrage. Headernamen werden im Ereignisobjekt in Kleinbuchstaben konvertiert und Headernamen müssen in Kleinbuchstaben stehen, wenn sie vom Funktionscode hinzugefügt werden. Wenn CloudFront Functions das Ereignisobjekt wieder in eine HTTP-Anforderung konvertiert, wird der erste Buchstabe jedes Worts in Header-Namen groß geschrieben. Wörter werden durch einen Bindestrich (-
) getrennt. Wenn Ihr Funktionscode beispielsweise einen Header mit dem Namenexample-header-name
, CloudFront konvertiert diesenExample-Header-Name
in der HTTP-Anfrage in. cookies
-
Ein Objekt, das die Cookies in der Anfrage darstellt (
Cookie
-Header).Das
cookies
-Objekt enthält ein Feld für jeden Cookie in der Anfrage.
Weitere Hinweise zur Struktur von Abfragezeichenfolgen, Headern und Cookies finden Sie unter Struktur von Abfragezeichenfolge, Header und Cookie.
Ein event
-Beispielobjekt finden Sie unter Beispiel für Ereignisobjekt.
Antwortobjekt
Das response
Objekt enthält eine Darstellung einer CloudFront-to-viewer HTTP-Antwort. In dem event
Objekt, das an Ihre Funktion übergeben wurde, stellt CloudFront das response
Objekt die tatsächliche Antwort auf eine Viewer-Anfrage dar.
Wenn Ihr Funktionscode ein response
-Objekt zurückgibt, muss er dieselbe Struktur verwenden.
Das response
-Objekt enthält die folgenden Felder:
statusCode
-
Den HTTP-Statuscode der Antwort. Dieser Wert ist eine Ganzzahl, keine Zeichenfolge.
Ihre Funktion kann den
statusCode
generieren oder ändern. statusDescription
-
Die HTTP-Statusbeschreibung der Antwort. Wenn Ihr Funktionscode eine Antwort generiert, ist dieses Feld optional.
headers
-
Ein Objekt, das die HTTP-Header in der Antwort darstellt. Wenn die Antwort
Set-Cookie
Header enthält, sind diese Header nicht Teil desheaders
-Objekts. Cookies werden imcookies
-Objekt separat dargestellt.Das
headers
-Objekt enthält ein Feld für jeden Header in der Antwort. Headernamen werden im Ereignisobjekt in Kleinbuchstaben konvertiert und Headernamen müssen in Kleinbuchstaben stehen, wenn sie vom Funktionscode hinzugefügt werden. Wenn CloudFront Functions das Ereignisobjekt wieder in eine HTTP-Antwort konvertiert, wird der erste Buchstabe jedes Worts in Header-Namen groß geschrieben. Wörter werden durch einen Bindestrich (-
) getrennt. Wenn Ihr Funktionscode beispielsweise einen Header mit dem Namenexample-header-name
, CloudFront konvertiert diesenExample-Header-Name
in die HTTP-Antwort. cookies
-
Ein Objekt, das die Cookies in der Antwort darstellt (
Set-Cookie
-Header).Das
cookies
-Objekt enthält ein Feld für jedes Cookie in der Antwort. body
-
Das Hinzufügen des
body
-Felds ist optional. Es wird imresponse
-Objekt nur dann vorhanden sein, wenn Sie es in Ihrer Funktion angeben. Ihre Funktion hat keinen Zugriff auf den Originaltext, der vom CloudFront Cache oder Origin zurückgegeben wurde. Wenn Sie dasbody
Feld in Ihrer Viewer-Antwortfunktion nicht angeben, wird der ursprüngliche Text, der vom CloudFront Cache oder Origin zurückgegeben wurde, an den Viewer zurückgegeben.Wenn Sie einen benutzerdefinierten Text CloudFront an den Viewer zurückgeben möchten, geben Sie den Hauptinhalt im
data
Feld und die Textkodierung imencoding
Feld an. Sie können die Codierung als Klartext ("encoding": "text"
) oder als Base64-codierten Inhalt ("encoding": "base64"
) angeben.Als Abkürzung können Sie den Textinhalt auch direkt im Feld
body
angeben ("body": "<specify the body content here>"
). Lassen Sie dabei dieencoding
Felderdata
und weg. CloudFront behandelt den Hauptteil in diesem Fall als einfachen Text.encoding
-
Die Codierung für den
body
-Inhalt (Felddata
). Die einzigen gültigen Codierungen sindtext
undbase64
.Wenn Sie
encoding
als angebenbase64
, der Hauptteil aber nicht gültig ist, wird Base64 CloudFront zurückgegeben. data
-
Der
body
-Inhalt.
Weitere Informationen zu geänderten Statuscodes und Textinhalten finden Sie unter Statuscode und Text.
Weitere Informationen zur Struktur von Headern und Cookies finden Sie unter Struktur von Abfragezeichenfolge, Header und Cookie.
Ein response
-Beispielobjekt finden Sie unter Beispiel für Antwortobjekt.
Statuscode und Text
Mit CloudFront Funktionen können Sie den Statuscode der Viewer-Antwort aktualisieren, den gesamten Antworttext durch einen neuen ersetzen oder den Antworttext entfernen. Zu den häufigsten Szenarien für die Aktualisierung der Antwort des Betrachters nach der Auswertung von Aspekten der Antwort aus dem CloudFront Cache oder dem Ursprung gehören die folgenden:
-
Ändern des Status, um einen HTTP-200-Statuscode festzulegen, und Erstellen statischer Textinhalte für die Rückgabe an den Viewer.
-
Ändern des Status, um einen HTTP-301- oder -302-Statuscode festzulegen, der den Benutzer auf eine andere Website umleitet.
-
Entscheiden, ob der Text der Viewer-Antwort weitergeleitet oder verworfen werden soll.
Anmerkung
Wenn der Ursprung einen HTTP-Fehler von 400 und höher zurückgibt, wird die CloudFront Funktion nicht ausgeführt. Weitere Informationen finden Sie unter Einschränkungen für alle Edge-Funktionen.
Wenn Sie mit der HTTP-Antwort arbeiten, hat CloudFront Functions keinen Zugriff auf den Antworttext. Sie können den Textinhalt ersetzen, indem Sie ihn auf den gewünschten Wert setzen, oder den Text entfernen, indem Sie den Wert auf leer setzen. Wenn Sie das Textfeld in Ihrer Funktion nicht aktualisieren, wird der ursprüngliche Text, der vom CloudFront Cache oder Origin zurückgegeben wurde, an den Viewer zurückgegeben.
Tipp
Wenn Sie CloudFront Funktionen verwenden, um einen Hauptteil zu ersetzen, achten Sie darauf, die entsprechenden Überschriften, z. B. content-encoding
content-type
, odercontent-length
, am neuen Hauptinhalt auszurichten.
Wenn beispielsweise der CloudFront Ursprung oder der Cache zurückgegeben wird, die Funktion „Antwort des Betrachters“ content-encoding:
gzip
jedoch einen Textkörper festlegt, der aus reinem Text besteht, muss die Funktion auch die content-type
Überschriften content-encoding
und entsprechend ändern.
Wenn Ihre CloudFront Funktion so konfiguriert ist, dass sie einen HTTP-Fehler von 400 oder höher zurückgibt, wird Ihrem Viewer keine benutzerdefinierte Fehlerseite angezeigt, die Sie für denselben Statuscode angegeben haben.
Struktur von Abfragezeichenfolge, Header und Cookie
Abfragezeichenfolgen, Header und Cookies haben dieselbe Struktur. Abfragezeichenfolgen können in Anforderungen vorkommen. Header erscheinen in Anforderungen und Antworten. Cookies erscheinen in Anforderungen und Antworten.
Jede Abfragezeichenfolge, jeder Header oder jedes Cookie ist ein eindeutiges Feld innerhalb des übergeordneten querystring
-, headers
- oder cookies
-Objekts. Der Feldname ist der Name der Abfragezeichenfolge, des Headers oder des Cookies. Jedes Feld enthält eine value
-Eigenschaft mit dem Wert der Abfragezeichenfolge, des Headers oder des Cookies.
Inhalt
Werte oder Objekte von Abfragezeichenfolgen
Eine Funktion kann zusätzlich zum Objekt den Wert einer Abfragezeichenfolge zurückgeben. Der Wert der Abfragezeichenfolge kann verwendet werden, um die Parameter der Abfragezeichenfolge in beliebiger benutzerdefinierter Reihenfolge anzuordnen.
Beispiel
Verwenden Sie Code wie den folgenden, um eine Abfragezeichenfolge in Ihrem Funktionscode zu ändern.
var request = event.request; request.querystring = 'ID=42&Exp=1619740800&TTL=1440&NoValue=&querymv=val1&querymv=val2,val3';
Besondere Überlegungen für Header
Nur für Header werden Headernamen im Ereignisobjekt in Kleinbuchstaben konvertiert und Headernamen müssen Kleinbuchstaben aufweisen, wenn sie vom Funktionscode hinzugefügt werden. Wenn CloudFront Functions das Ereignisobjekt wieder in eine HTTP-Anfrage oder -Antwort konvertiert, wird der erste Buchstabe jedes Worts in Header-Namen groß geschrieben. Wörter werden durch einen Bindestrich (-
) getrennt. Wenn Ihr Funktionscode beispielsweise einen Header mit dem Namenexample-header-name
, CloudFront konvertiert diesen Example-Header-Name
in die HTTP-Anfrage oder -Antwort.
Beispiel
Betrachten Sie den folgenden Host
Header in einer HTTP-Anfrage.
Host: video.example.com
Dieser Header wird im request
-Objekt wie folgt dargestellt:
"headers": { "host": { "value": "video.example.com" } }
Um auf den Host
-Header in Ihrem Funktionscode zuzugreifen, verwenden Sie Code wie den folgenden:
var request = event.request; var host = request.headers.host.value;
Um einen Header in Ihrem Funktionscode hinzuzufügen oder zu ändern, verwenden Sie Code wie den folgenden (dieser Code fügt einen Header mit Namen X-Custom-Header
und Wert example value
hinzu):
var request = event.request; request.headers['x-custom-header'] = {value: 'example value'};
Doppelte Abfragezeichenfolgen, Header und Cookies (multiValue
-Array)
Eine HTTP-Anfrage oder Antwort kann mehr als eine Abfragezeichenfolge, einen Header oder ein Cookie mit demselben Namen enthalten. In diesem Fall sind die doppelten Abfragezeichenfolgen, -Header oder -Cookies in einem Feld im request
- oder response
-Objekt zusammengefasst, aber dieses Feld enthält eine zusätzliche Eigenschaft namens multiValue
. Die multiValue
-Eigenschaft enthält ein Array mit den Werten der doppelten Abfragezeichenfolgen, Header oder Cookies.
Beispiel
Stellen Sie sich eine HTTP-Anfrage mit den folgenden Accept
Headern vor.
Accept: application/json Accept: application/xml Accept: text/html
Diese Header werden im Objekt wie folgt dargestellt. request
"headers": { "accept": { "value": "application/json", "multiValue": [ { "value": "application/json" }, { "value": "application/xml" }, { "value": "text/html" } ] } }
Anmerkung
Der erste Header-Wert (in diesem Fallapplication/json
) wird sowohl in den multiValue
Eigenschaften als value
auch wiederholt. Auf diese Weise können Sie auf alle Werte zugreifen, indem Sie das multiValue
-Array durchlaufen.
Wenn Ihr Funktionscode eine Abfragezeichenfolge, einen Header oder ein Cookie mit einem multiValue
Array ändert, verwendet CloudFront Functions die folgenden Regeln, um die Änderungen anzuwenden:
-
Wenn das
multiValue
-Array existiert und Änderungen hat, wird diese Änderung angewendet. Das erste Element in dervalue
-Eigenschaft wird ignoriert. -
Andernfalls wird jede Änderung der
value
-Eigenschaft angewendet, und nachfolgende Werte (falls vorhanden) bleiben unverändert.
Die multiValue
-Eigenschaft wird nur verwendet, wenn die HTTP-Anfrage oder Antwort doppelte Abfragezeichenfolgen, Header oder Cookies mit demselben Namen enthält, wie im vorherigen Beispiel gezeigt. Wenn jedoch mehrere Werte in einer einzelnen Abfragezeichenfolge, einem Header oder einem Cookie vorhanden sind, wird die multiValue
-Eigenschaft nicht verwendet.
Beispiel
Stellen Sie sich eine Anfrage mit einem Accept
Header vor, der drei Werte enthält.
Accept: application/json, application/xml, text/html
Dieser Header wird im request
Objekt wie folgt dargestellt.
"headers": { "accept": { "value": "application/json, application/xml, text/html" } }
Cookie-Attribute
In einem Set-Cookie
-Header in einer HTTP-Antwort enthält der Header das Name-Wert-Paar für das Cookie und optional eine Reihe von durch Semikolons getrennten Attributen.
Beispiel
Set-Cookie: cookie1=val1; Secure; Path=/; Domain=example.com; Expires=Wed, 05 Apr 2021 07:28:00 GMT
In dem response
-Objekt werden diese Attribute in der attributes
-Eigenschaft des Cookie-Feldes dargestellt. Der vorangehende Set-Cookie
-Header wird beispielsweise wie folgt dargestellt:
"cookie1": { "value": "val1", "attributes": "Secure; Path=/; Domain=example.com; Expires=Wed, 05 Apr 2021 07:28:00 GMT" }
Beispiel für Antwortobjekt
Das folgende Beispiel zeigt ein response
-Objekt – die Ausgabe einer Viewer-Antwortfunktion –, in dem der Text durch eine Viewer-Antwortfunktion ersetzt wurde.
{ "response": { "statusCode": 200, "statusDescription": "OK", "headers": { "date": { "value": "Mon, 04 Apr 2021 18:57:56 GMT" }, "server": { "value": "gunicorn/19.9.0" }, "access-control-allow-origin": { "value": "*" }, "access-control-allow-credentials": { "value": "true" }, "content-type": { "value": "text/html" }, "content-length": { "value": "86" } }, "cookies": { "ID": { "value": "id1234", "attributes": "Expires=Wed, 05 Apr 2021 07:28:00 GMT" }, "Cookie1": { "value": "val1", "attributes": "Secure; Path=/; Domain=example.com; Expires=Wed, 05 Apr 2021 07:28:00 GMT", "multiValue": [ { "value": "val1", "attributes": "Secure; Path=/; Domain=example.com; Expires=Wed, 05 Apr 2021 07:28:00 GMT" }, { "value": "val2", "attributes": "Path=/cat; Domain=example.com; Expires=Wed, 10 Jan 2021 07:28:00 GMT" } ] } }, // Adding the body field is optional and it will not be present in the response object // unless you specify it in your function. // Your function does not have access to the original body returned by the CloudFront // cache or origin. // If you don't specify the body field in your viewer response function, the original // body returned by the CloudFront cache or origin is returned to viewer. "body": { "encoding": "text", "data": "<!DOCTYPE html><html><body><p>Here is your custom content.</p></body></html>" } } }
Beispiel für Ereignisobjekt
Das folgende Beispiel zeigt ein vollständiges event
-Objekt:
Anmerkung
Das event
-Objekt ist die Eingabe für Ihre Funktion. Ihre Funktion gibt nur das request
- oder response
-Objekt zurück, nicht das vollständige event
-Objekt.
{ "version": "1.0", "context": { "distributionDomainName": "d111111abcdef8.cloudfront.net", "distributionId": "EDFDVBD6EXAMPLE", "eventType": "viewer-response", "requestId": "EXAMPLEntjQpEXAMPLE_SG5Z-EXAMPLEPmPfEXAMPLEu3EqEXAMPLE==" }, "viewer": {"ip": "198.51.100.11"}, "request": { "method": "GET", "uri": "/media/index.mpd", "querystring": { "ID": {"value": "42"}, "Exp": {"value": "1619740800"}, "TTL": {"value": "1440"}, "NoValue": {"value": ""}, "querymv": { "value": "val1", "multiValue": [ {"value": "val1"}, {"value": "val2,val3"} ] } }, "headers": { "host": {"value": "video.example.com"}, "user-agent": {"value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0"}, "accept": { "value": "application/json", "multiValue": [ {"value": "application/json"}, {"value": "application/xml"}, {"value": "text/html"} ] }, "accept-language": {"value": "en-GB,en;q=0.5"}, "accept-encoding": {"value": "gzip, deflate, br"}, "origin": {"value": "https://website.example.com"}, "referer": {"value": "https://website.example.com/videos/12345678?action=play"}, "cloudfront-viewer-country": {"value": "GB"} }, "cookies": { "Cookie1": {"value": "value1"}, "Cookie2": {"value": "value2"}, "cookie_consent": {"value": "true"}, "cookiemv": { "value": "value3", "multiValue": [ {"value": "value3"}, {"value": "value4"} ] } } }, "response": { "statusCode": 200, "statusDescription": "OK", "headers": { "date": {"value": "Mon, 04 Apr 2021 18:57:56 GMT"}, "server": {"value": "gunicorn/19.9.0"}, "access-control-allow-origin": {"value": "*"}, "access-control-allow-credentials": {"value": "true"}, "content-type": {"value": "application/json"}, "content-length": {"value": "701"} }, "cookies": { "ID": { "value": "id1234", "attributes": "Expires=Wed, 05 Apr 2021 07:28:00 GMT" }, "Cookie1": { "value": "val1", "attributes": "Secure; Path=/; Domain=example.com; Expires=Wed, 05 Apr 2021 07:28:00 GMT", "multiValue": [ { "value": "val1", "attributes": "Secure; Path=/; Domain=example.com; Expires=Wed, 05 Apr 2021 07:28:00 GMT" }, { "value": "val2", "attributes": "Path=/cat; Domain=example.com; Expires=Wed, 10 Jan 2021 07:28:00 GMT" } ] } } } }