Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
CloudFront Funzioni, struttura degli eventi
CloudFront Functions passa un event
oggetto al codice della funzione come input quando esegue la funzione. Quando si testa una funzione, si crea l'oggetto event
e lo si passa alla funzione. Quando si crea un oggetto event
per testare una funzione, puoi omettere i campi distributionDomainName
, distributionId
e requestId
nell'oggetto context
. Assicuratevi che i nomi delle intestazioni siano in minuscolo, come accade sempre nell'event
oggetto che CloudFront Functions passa alla funzione in produzione.
Di seguito viene illustrata una panoramica della struttura di questo oggetto evento.
{ "version": "1.0", "context": { <context object> }, "viewer": { <viewer object> }, "request": { <request object> }, "response": { <response object> } }
Per ulteriori informazioni, consulta i seguenti argomenti:
Argomenti
Campo Versione
Il version
campo contiene una stringa che specifica la versione dell'oggetto evento Functions. CloudFront La versione corrente è 1.0
.
Oggetto Context
L'oggetto context
contiene informazioni contestuali sull'evento. Include i seguenti campi:
distributionDomainName
-
Il nome di CloudFront dominio (ad esempio, d111111abcdef8.cloudfront.net) della distribuzione associata all'evento.
distributionId
-
L’ID della distribuzione (ad esempio, EDFDVBD6EXAMPLE) associata all'evento.
eventType
-
Il tipo di evento,
viewer-request
oviewer-response
. requestId
-
Una stringa che identifica in modo univoco una richiesta (e la risposta associata). CloudFront
Oggetto Viewer
L'oggetto viewer
contiene un campo ip
il cui valore è l'indirizzo IP del visualizzatore (client) che ha inviato la richiesta. Se il visualizzatore ha utilizzato un proxy HTTP o un sistema di bilanciamento del carico per inviare la richiesta, il valore è l'indirizzo IP del proxy o del sistema di bilanciamento del carico.
Oggetto Request
L'request
oggetto contiene una rappresentazione di una richiesta da visualizzatore a HTTP. CloudFront Nell'event
oggetto passato alla funzione, l'request
oggetto rappresenta la richiesta effettiva CloudFront ricevuta dal visualizzatore.
Se il codice della funzione restituisce un request
oggetto a CloudFront, deve utilizzare la stessa struttura.
L'oggetto request
include i seguenti campi:
method
-
Metodo HTTP nella richiesta. Se il codice della funzione restituisce un
request
, non può modificare questo campo. Questo è l'unico campo di sola lettura nell'oggettorequest
. uri
-
Il percorso relativo dell'oggetto richiesto.
Nota
Se la funzione modifica il
uri
valore, si applica quanto segue:-
Il nuovo valore
uri
deve iniziare con una barra (/
). -
Se una funzione modifica il valore di
uri
, l'oggetto richiesto dal visualizzatore viene modificato. -
Se una funzione modifica il valore di
uri
, il comportamento della cache per la richiesta o l'origine a cui la richiesta viene inoltrata non viene modificato.
-
querystring
-
Un oggetto che rappresenta la stringa di query nella richiesta. Se la richiesta non include una stringa di query, l’oggetto
request
include comunque un oggettoquerystring
vuoto.L'oggetto
querystring
contiene un campo per ogni parametro della stringa di query nella richiesta. headers
-
Un oggetto che rappresenta le intestazioni HTTP nella richiesta. Se la richiesta contiene intestazioni
Cookie
, queste non faranno parte dell'oggettoheaders
. I cookie sono rappresentati separatamente nell'oggettocookies
.L'oggetto
headers
contiene un campo per ogni intestazione della richiesta. I nomi delle intestazioni vengono convertiti in minuscolo nell'oggetto evento e i nomi delle intestazioni devono essere in minuscolo quando vengono aggiunti dal codice della funzione. Quando CloudFront Functions riconverte l'oggetto evento in una richiesta HTTP, la prima lettera di ogni parola nei nomi delle intestazioni viene scritta in maiuscolo. Le parole sono separate da un trattino (-
). Ad esempio, se il codice della funzione aggiunge un'intestazione denominataexample-header-name
, la CloudFront converte in nella richiesta HTTP.Example-Header-Name
cookies
-
Un oggetto che rappresenta i cookie nella richiesta (intestazioni
Cookie
).L'oggetto
cookies
contiene un campo per ogni cookie nella richiesta.
Per ulteriori informazioni sulla struttura delle stringhe di query, delle intestazioni e dei cookie, consulta Struttura di una stringa di query, un'intestazione o cookie.
Per un oggetto event
di esempio, consulta Oggetto evento di esempio.
Oggetto Response
L'response
oggetto contiene una rappresentazione di una risposta HTTP CloudFront -to-viewer. Nell'event
oggetto passato alla funzione, l'response
oggetto rappresenta la risposta effettiva CloudFront di un utente a una richiesta del visualizzatore.
Se il codice funzione restituisce un oggetto response
, deve utilizzare la stessa struttura.
L'oggetto response
include i seguenti campi:
statusCode
-
Il codice di stato HTTP per la risposta. Questo valore è un numero intero, non una stringa.
La funzione può generare o modificare il
statusCode
. statusDescription
-
Descrizione dello stato HTTP della risposta. Se il codice funzione genera una risposta, questo campo è facoltativo.
headers
-
Un oggetto che rappresenta le intestazioni HTTP nella risposta. Se la risposta contiene intestazioni
Set-Cookie
, queste non faranno parte dell'oggettoheaders
. I cookie sono rappresentati separatamente nell'oggettocookies
.L'oggetto
headers
contiene un campo per ogni intestazione della risposta. I nomi delle intestazioni vengono convertiti in minuscolo nell'oggetto evento e i nomi delle intestazioni devono essere in minuscolo quando vengono aggiunti dal codice della funzione. Quando CloudFront Functions riconverte l'oggetto evento in una risposta HTTP, la prima lettera di ogni parola nei nomi delle intestazioni viene scritta in maiuscolo. Le parole sono separate da un trattino (-
). Ad esempio, se il codice della funzione aggiunge un'intestazione denominataexample-header-name
, la CloudFront converte in nella risposta HTTP.Example-Header-Name
cookies
-
Un oggetto che rappresenta i cookie nella risposta (intestazioni
Set-Cookie
).L'oggetto
cookies
contiene un campo per ogni cookie nella risposta. body
-
L'aggiunta del campo
body
è facoltativa e non sarà presente nell'oggettoresponse
a meno che non venga specificato nella funzione. La funzione non ha accesso al corpo originale restituito dalla CloudFront cache o dall'origine. Se non specificate ilbody
campo nella funzione di risposta del visualizzatore, il corpo originale restituito dalla CloudFront cache o dall'origine viene restituito al visualizzatore.Se desideri CloudFront restituire un corpo personalizzato al visualizzatore, specifica il contenuto del corpo nel
data
campo e la codifica del corpo nelencoding
campo. Puoi specificare la codifica come testo normale ("encoding": "text"
) o come contenuto con codifica Base64 ("encoding": "base64"
).Come scelta rapida, puoi anche specificare il contenuto del corpo direttamente nel campo
body
("body": "<specify the body content here>"
). Quando esegui questa operazione, ometti i campidata
eencoding
. CloudFront in questo caso tratta il corpo come testo semplice.encoding
-
La codifica del contenuto
body
(campodata
). Le uniche codifiche valide sonotext
ebase64
.Se si specifica
encoding
comebase64
ma il corpo non è valido base64, CloudFront restituisce un errore. data
-
Il contenuto
body
.
Per ulteriori informazioni sui codici di stato modificati e sul contenuto del corpo, consultare Codice di stato e corpo.
Per ulteriori informazioni sulla struttura delle intestazioni e dei cookie, consulta Struttura di una stringa di query, un'intestazione o cookie.
Per un oggetto response
di esempio, consulta Oggetto risposta di esempio.
Codice di stato e corpo
Con CloudFront Functions, puoi aggiornare il codice di stato della risposta del visualizzatore, sostituire l'intero corpo della risposta con uno nuovo o rimuovere il corpo della risposta. Alcuni scenari comuni per l'aggiornamento della risposta del visualizzatore dopo aver valutato alcuni aspetti della risposta dalla CloudFront cache o dall'origine includono quanto segue:
-
Modifica dello stato per impostare un codice di stato HTTP 200 e creazione di contenuto di corpo statico da restituire al visualizzatore.
-
Modifica dello stato per impostare un codice di stato HTTP 301 o 302 per reindirizzare l’utente a un altro sito Web.
-
Decidere se fornire o eliminare il corpo della risposta visualizzatore.
Nota
Se l'origine restituisce un errore HTTP pari o superiore a 400, la CloudFront funzione non verrà eseguita. Per ulteriori informazioni, consulta Restrizioni su tutte le funzioni edge.
Quando lavori con la risposta HTTP, CloudFront Functions non ha accesso al corpo della risposta. Puoi sostituire un contenuto del corpo impostandolo sul valore desiderato oppure puoi rimuovere il corpo impostando il valore in modo da essere vuoto. Se non aggiorni il campo body della tua funzione, il corpo originale restituito dalla CloudFront cache o dall'origine viene restituito al visualizzatore.
Suggerimento
Quando usi CloudFront Functions per sostituire un corpo, assicurati di allineare le intestazioni corrispondenti, ad esempiocontent-encoding
, or content-type
content-length
, al nuovo contenuto del corpo.
Ad esempio, se l' CloudFront origine o la cache restituiscono content-encoding:
gzip
ma la funzione di risposta del visualizzatore imposta un corpo in testo semplice, la funzione deve anche modificare le content-type
intestazioni content-encoding
e di conseguenza.
Se la CloudFront funzione è configurata per restituire un errore HTTP pari o superiore a 400, il visualizzatore non visualizzerà una pagina di errore personalizzata specificata per lo stesso codice di stato.
Struttura di una stringa di query, un'intestazione o cookie
Le stringhe di query, le intestazioni e i cookie condividono la stessa struttura. Le stringhe di query possono apparire nelle richieste. Le intestazioni vengono visualizzate nelle richieste e nelle risposte. I cookie vengono visualizzati nelle richieste e nelle risposte.
Ogni stringa di query, intestazione o cookie è un campo univoco all'interno dell'oggetto padre querystring
, headers
o cookies
. Il nome del campo è il nome della stringa di query, dell'intestazione o del cookie. Ogni campo contiene una proprietà value
con il valore della stringa di query, dell'intestazione o del cookie.
Indice
Valori stringa di query od oggetti stringa di query
Oltre a un oggetto, una funzione può restituire un valore stringa di query. È possibile utilizzare il valore stringa di query per disporre i parametri della stringa di query in qualsiasi ordine personalizzato.
Esempio
Per modificare una stringa di query nel codice della funzione, usa un codice come il seguente.
var request = event.request; request.querystring = 'ID=42&Exp=1619740800&TTL=1440&NoValue=&querymv=val1&querymv=val2,val3';
Considerazioni speciali per le intestazioni
Solo per le intestazioni, i nomi delle intestazioni vengono convertiti in minuscolo nell'oggetto evento e i nomi delle intestazioni devono essere in minuscolo quando vengono aggiunti dal codice della funzione. Quando CloudFront Functions riconverte l'oggetto evento in una richiesta o risposta HTTP, la prima lettera di ogni parola nei nomi delle intestazioni viene scritta in maiuscolo. Le parole sono separate da un trattino (-
). Ad esempio, se il codice della funzione aggiunge un'intestazione denominataexample-header-name
, la CloudFront converte nella richiesta o Example-Header-Name
nella risposta HTTP.
Esempio
Considerate l'Host
intestazione seguente in una richiesta HTTP.
Host: video.example.com
Questa intestazione è rappresentata come segue nell'oggetto request
:
"headers": { "host": { "value": "video.example.com" } }
Per accedere all'intestazione Host
nel codice funzione, utilizza un codice come il seguente:
var request = event.request; var host = request.headers.host.value;
Per aggiungere o modificare un'intestazione nel codice funzione, utilizza un codice come il seguente (questo codice aggiunge un'intestazione denominata X-Custom-Header
con il valore example value
):
var request = event.request; request.headers['x-custom-header'] = {value: 'example value'};
Stringhe di query, intestazioni e cookie duplicati (array multiValue
)
Una richiesta o una risposta HTTP può contenere più di una stringa di query, intestazione o cookie con lo stesso nome. In questo caso, le stringhe di query, le intestazioni o i cookie duplicati vengono compressi in un campo nell'oggetto request
o response
, ma questo campo conterrà una proprietà aggiuntiva denominata multiValue
. La proprietà multiValue
contiene un array con i valori di ciascuna delle stringhe di query, intestazioni o cookie duplicati.
Esempio
Considerate una richiesta HTTP con le seguenti Accept
intestazioni.
Accept: application/json Accept: application/xml Accept: text/html
Queste intestazioni sono rappresentate come segue nell'request
oggetto.
"headers": { "accept": { "value": "application/json", "multiValue": [ { "value": "application/json" }, { "value": "application/xml" }, { "value": "text/html" } ] } }
Nota
Il primo valore di intestazione (in questo caso,application/json
) viene ripetuto in entrambe le proprietà value
emultiValue
. Ciò consente di accedere a tutti i valori di passare attraverso l'array multiValue
.
Se il codice della funzione modifica una stringa di query, un'intestazione o un cookie con un multiValue
array, CloudFront Functions utilizza le seguenti regole per applicare le modifiche:
-
Se l'array
multiValue
esiste e ha una qualsiasi modifica, allora tale modifica viene applicata. Il primo elemento della proprietàvalue
viene ignorato. -
In caso contrario, viene applicata qualsiasi modifica alla proprietà
value
e i valori successivi (se presenti) rimangono invariati.
La proprietà multiValue
viene utilizzata solo quando la richiesta HTTP o la risposta contiene stringhe di query duplicate, intestazioni o cookie con lo stesso nome, come illustrato nell'esempio precedente. Tuttavia, se sono presenti più valori in una singola stringa di query, intestazione o cookie, la proprietà multiValue
non viene utilizzata.
Esempio
Consideriamo una richiesta con un'Accept
intestazione che contiene tre valori.
Accept: application/json, application/xml, text/html
Questa intestazione è rappresentata come segue nell'request
oggetto.
"headers": { "accept": { "value": "application/json, application/xml, text/html" } }
Attributi cookie
In una intestazione Set-Cookie
in una risposta HTTP, l'intestazione contiene la coppia nome-valore per il cookie e facoltativamente un insieme di attributi separati da punto e virgola.
Esempio
Set-Cookie: cookie1=val1; Secure; Path=/; Domain=example.com; Expires=Wed, 05 Apr 2021 07:28:00 GMT
Nell'oggetto response
, questi attributi sono rappresentati nella proprietà attributes
del campo cookie. Ad esempio, l'intestazione Set-Cookie
precedente è rappresentata come segue:
"cookie1": { "value": "val1", "attributes": "Secure; Path=/; Domain=example.com; Expires=Wed, 05 Apr 2021 07:28:00 GMT" }
Oggetto risposta di esempio
L'esempio seguente mostra un oggetto response
, l'output di una funzione di risposta del visualizzatore, in cui il corpo è stato sostituito da una funzione di risposta del visualizzatore.
{ "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>" } } }
Oggetto evento di esempio
Di seguito viene illustrato un esempio di oggetto event
completo.
Nota
L'oggetto event
è l'input per la tua funzione. La funzione restituisce solo l'oggetto request
o response
, non l'oggetto event
completo.
{ "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" } ] } } } }