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à.
Per utilizzare le richieste e le risposte Lambda @Edge, consulta i seguenti argomenti:
Argomenti
Usa le funzioni Lambda @Edge con failover di origine
Puoi utilizzare le funzioni Lambda @Edge con le CloudFront distribuzioni che hai configurato con i gruppi di origine, ad esempio per il failover di origine che configuri per garantire un'elevata disponibilità. Per usare una funzione Lambda con un gruppo di origine, specifica la funzione in una richiesta all'origine o di risposta di origine trigger per un gruppo di origine quando crei il comportamento cache.
Per ulteriori informazioni, consulta gli argomenti seguenti:
-
Crea gruppi di origine: Crea un gruppo di origine
-
Come funziona il failover di origine con Lambda@Edge: Utilizzo del failover di origine con le funzioni Lambda@Edge
Genera risposte HTTP nei trigger di richiesta
Quando si CloudFront riceve una richiesta, è possibile utilizzare una funzione Lambda per generare una risposta HTTP che CloudFront ritorna direttamente al visualizzatore senza inoltrare la risposta all'origine. La generazione di risposte HTTP riduce il carico sull'origine e in genere riduce la latenza per il visualizzatore.
Alcuni scenari comuni per la generazione di risposte HTTP sono:
-
Restituzione di una piccola pagina Web al visualizzatore
-
Restituzione di un codice di stato HTTP 301 o 302 per reindirizzare l'utente a un'altra pagina Web
-
Restituzione di un codice di stato HTTP 401 al visualizzatore quando l'utente non ha eseguito la procedura di autenticazione
Una funzione Lambda@Edge può generare una risposta HTTP quando si verificano i seguenti eventi di CloudFront:
- Eventi di richiesta visualizzatore
-
Quando una funzione viene attivata da un evento di richiesta del visualizzatore, CloudFront restituisce la risposta al visualizzatore e non la memorizza nella cache.
- Eventi di richiesta origine
-
Quando una funzione viene attivata da un evento di richiesta di origine, CloudFront verifica nella cache edge la presenza di una risposta precedentemente generata dalla funzione.
-
Se la risposta è nella cache, la funzione non viene eseguita e CloudFront restituisce la risposta memorizzata nella cache al visualizzatore.
-
Se la risposta non è nella cache, la funzione viene eseguita e CloudFront restituisce la risposta al visualizzatore e la memorizza nella cache.
-
Per vedere il codice di esempio per la generazione di risposte HTTP, consulta Esempi di funzioni Lambda@Edge. È inoltre possibile sostituire le risposte HTTP nei trigger di risposta. Per ulteriori informazioni, consulta Aggiorna le risposte HTTP nei trigger di risposta di origine.
Modello di programmazione
Questa sezione descrive il modello di programmazione che consente di utilizzare Lambda@Edge per generare risposte HTTP.
Oggetto Response
La risposta che restituisci come parametro result
del metodo callback
deve avere la seguente struttura (nota che solo il campo status
è obbligatorio).
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'
};
L'oggetto di risposta può includere i seguenti valori:
body
-
Il corpo, se presente, che si desidera CloudFront restituire nella risposta generata.
bodyEncoding
-
La codifica per il valore che hai specificato in
body
. Le uniche codifiche valide sonotext
ebase64
. Se lo includetebody
nell'response
oggetto ma lo omettetebodyEncoding
, CloudFront considera il corpo come testo.Se specifichi
bodyEncoding
comebase64
, ma il corpo non è valido in base64, CloudFront restituisce un errore. headers
-
Intestazioni che desiderate CloudFront restituire nella risposta generata. Tieni presente quanto segue:
-
Le chiavi nell'oggetto
headers
sono versioni in minuscolo di nomi di intestazione HTTP standard. L'utilizzo di chiavi in minuscolo fornisce accesso ai valori delle intestazioni senza distinzione tra maiuscole e minuscole. -
Ogni intestazione (ad esempio,
headers["accept"]
oheaders["host"]
) è una matrice di coppie chiave-valore. Per una determinata intestazione, la matrice contiene una coppia chiave-valore per ogni valore nella risposta generata. -
key
(facoltativo) è il nome dell'intestazione con distinzione tra maiuscole e minuscole come visualizzato in una richiesta HTTP, ad esempioaccept
ohost
. -
Specifica
value
come valore dell'intestazione. -
Se non includi la chiave dell'intestazione parte della coppia chiave-valore, Lambda@Edge inserisce automaticamente una chiave dell'intestazione utilizzando il nome dell'intestazione che fornisci. Indipendentemente dalla formattazione del nome dell'intestazione, la chiave dell'intestazione automaticamente inserita sarà formattata con iniziale maiuscola per tutte le parti, separate da trattini (-).
Ad esempio, è possibile aggiungere un'intestazione come quella seguente, senza una chiave dell'intestazione:
'content-type': [{ value: 'text/html;charset=UTF-8' }]
In questo esempio, Lambda@Edge crea la chiave dell'intestazione seguente:
Content-Type
.
Per informazioni sulle restrizioni di utilizzo delle intestazioni, consulta Restrizioni sulle funzioni edge.
-
status
-
Codice di stato HTTP . Fornisci il codice di stato come stringa. CloudFront utilizza il codice di stato fornito per quanto segue:
-
Restituzione nella risposta
-
Cache nella cache CloudFront edge, quando la risposta è stata generata da una funzione attivata da un evento di richiesta di origine
-
Effettua il login CloudFront Registrazione standard (registri di accesso)
Se il valore
status
non è compreso tra 200 e 599, CloudFront restituisce un errore al visualizzatore. -
statusDescription
-
La descrizione che desideri CloudFront restituire nella risposta, da allegare al codice di stato HTTP. Non hai bisogno di utilizzare le descrizioni standard, ad esempio
OK
per un codice di stato HTTP 200.
Errori
Di seguito sono riportati possibili errori per le risposte HTTP generate.
La risposta contiene un corpo e specifica un codice di stato 204 (Nessun contenuto)
-
Quando una funzione viene attivata da una richiesta del visualizzatore, CloudFront restituisce un codice di stato HTTP 502 (Bad Gateway) al visualizzatore quando entrambe le seguenti condizioni sono vere:
-
Il valore di
status
è 204 (Nessun contenuto) -
La risposta include un valore per
body
Questo perché Lambda@Edge impone la restrizione facoltativa inclusa in RFC 2616, che indica che una risposta
HTTP 204
non deve contenere un corpo di messaggio. -
Restrizioni relative alla dimensione della risposta generata
-
La dimensione massima di una risposta generata da una funzione Lambda dipende dall'evento che ha attivato la funzione:
-
Eventi di richiesta visualizzatore - 40 KB
-
Eventi di richiesta origine - 1 MB
Se la risposta è maggiore della dimensione consentita, CloudFront restituisce un codice di stato HTTP 502 (Bad Gateway) al visualizzatore.
-
Campi obbligatori
Il campo status
è obbligatorio.
Tutti gli altri campi sono facoltativi.
Aggiorna le risposte HTTP nei trigger di risposta di origine
Quando CloudFront riceve una risposta HTTP dal server di origine, se al comportamento della cache è associato un trigger di risposta all'origine, puoi modificare la risposta HTTP per sovrascrivere ciò che è stato restituito dall'origine.
Alcuni scenari comuni per l'aggiornamento di risposte HTTP sono:
-
Modifica dello stato per impostare un codice di stato HTTP 200 e creazione di contenuto di corpo statico da restituire al visualizzatore quando un'origine restituisce un codice di stato di errore (4xx e 5xx). Per il codice di esempio, consulta Esempio: utilizza un trigger di risposta all'origine per aggiornare il codice di stato dell'errore su 200.
-
Modifica dello stato per impostare un codice di stato HTTP 301 o 302, al fine di reindirizzare l'utente a un altro sito Web quando un'origine restituisce un codice di stato di errore (4xx e 5xx). Per il codice di esempio, consulta Esempio: utilizza un trigger di risposta di origine per aggiornare il codice di stato dell'errore a 302.
Nota
La funzione deve restituire un valore di stato compreso tra 200
e 599
(incluso), altrimenti CloudFront restituisce un errore al visualizzatore.
È inoltre possibile sostituire le risposte HTTP negli eventi di richiesta origine e visualizzatore. Per ulteriori informazioni, consulta Genera risposte HTTP nei trigger di richiesta.
Quando utilizzi la risposta HTTP, Lambda@Edge non espone il corpo restituito dal server di origine al trigger di risposta origine. Puoi generare un corpo di contenuto statico impostandolo sul valore desiderato oppure rimuovere il corpo nella funzione impostando un valore vuoto. Se non aggiorni il campo del corpo nella funzione, il corpo originale restituito dal server di origine viene restituito al visualizzatore.
Accedi al corpo della richiesta scegliendo l'opzione include body
Ora puoi fare in modo che Lambda@Edge esponga il corpo in una richiesta per metodi HTTP con possibilità di scrittura (POST, PUT, DELETE e così via), in modo che tu possa accedervi dalla tua funzione Lambda. È possibile scegliere le autorizzazioni di accesso in sola lettura, oppure è possibile specificare che sarà possibile sostituire il corpo.
Per attivare questa opzione, scegli Include Body (Includi corpo) al momento della creazione di un trigger CloudFront per la tua funzione, per una richiesta di un visualizzatore o per un evento di richiesta del server di origine. Per ulteriori informazioni, consulta Aggiungere trigger per una funzione Lambda @Edge o per ulteriori informazioni su come usare Include Body (Includi corpo) con la tua funzione, vedi Struttura dell'evento Lambda@Edge.
Tra gli scenari in cui è possibile utilizzare questa funzionalità figurano i seguenti:
-
Elaborazione di moduli Web, ad esempio "Contattaci", senza l'invio di dati di input del cliente a server di origine.
-
Raccolta di dati di beacon Web inviati dai browser dei visualizzatori e l'elaborazione al confine.
Per il codice di esempio, consulta Esempi di funzioni Lambda@Edge.
Nota
Se il corpo della richiesta è di grandi dimensioni, Lambda@Edge lo tronca. Per informazioni dettagliate sulle dimensioni massime e il troncamento, consulta Restrizioni sul corpo della richiesta con l'opzione Includi corpo.