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à.
Lavora con richieste e risposte
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 HTTP risposte nei trigger di richiesta
Quando si CloudFront riceve una richiesta, è possibile utilizzare una funzione Lambda per generare una HTTP risposta che CloudFront ritorna direttamente al visualizzatore senza inoltrare la risposta all'origine. La generazione di HTTP risposte riduce il carico sull'origine e in genere riduce anche la latenza per il visualizzatore.
Alcuni scenari comuni per la generazione di HTTP risposte includono:
-
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 si è autenticato
Una funzione Lambda @Edge può generare una HTTP risposta quando si verificano i seguenti CloudFront eventi:
- 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, CloudFront restituisce la risposta al visualizzatore e la memorizza nella cache.
-
Per vedere un codice di esempio per la generazione di HTTP risposte, consultaEsempi di funzioni Lambda@Edge. Puoi anche sostituire le HTTP risposte nei trigger di risposta. Per ulteriori informazioni, consulta Aggiorna HTTP le risposte nei trigger di risposta di Origin.
Modello di programmazione
Questa sezione descrive il modello di programmazione per l'utilizzo di Lambda @Edge per generare HTTP risposte.
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 includetebody
nell'response
oggetto ma lo omettetebodyEncoding
, CloudFront considera il corpo come testo.Se si specifica
bodyEncoding
comebase64
ma il corpo non è valido base64, CloudFront restituisce un errore. headers
-
Intestazioni che si desidera CloudFront restituire nella risposta generata. Tieni presente quanto segue:
-
Le chiavi dell'
headers
oggetto sono versioni minuscole dei nomi di intestazione standardHTTP. 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
(opzionale) è il nome dell'intestazione con distinzione tra maiuscole e minuscole così come appare in una HTTP richiesta; ad esempio, o.accept
host
-
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
-
Il HTTP codice di stato. 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 Configurazione e utilizzo di log standard (log di accesso)
Se il
status
valore non è compreso tra 200 e 599, CloudFront restituisce un errore al visualizzatore. -
statusDescription
-
La descrizione che desideri CloudFront restituire nella risposta, che accompagna il codice di HTTP stato. Non è necessario utilizzare descrizioni standard, ad esempio
OK
per un codice di HTTP stato 200.
Errori
Di seguito sono riportati i possibili errori relativi HTTP alle risposte 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 opzionale trovata in RFC 2616, che afferma che una
HTTP 204
risposta non deve contenere un corpo del 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 HTTP le risposte nei trigger di risposta di Origin
Quando CloudFront riceve una HTTP risposta dal server di origine, se è presente un trigger di risposta all'origine associato al comportamento della cache, puoi modificare la HTTP risposta per sovrascrivere ciò che è stato restituito dall'origine.
Alcuni scenari comuni per l'aggiornamento HTTP delle risposte includono:
-
Modifica dello stato per impostare un codice di stato HTTP 200 e creazione di contenuto statico del corpo da restituire al visualizzatore quando un'origine restituisce un codice di stato di errore (4xx o 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 HTTP 302, per reindirizzare l'utente a un altro sito Web quando un'origine restituisce un codice di stato di errore (4xx o 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.
Puoi anche sostituire le HTTP risposte negli eventi viewer e origin request. Per ulteriori informazioni, consulta Genera HTTP risposte nei trigger di richiesta.
Quando lavori con la HTTP risposta, Lambda @Edge non espone il corpo restituito dal server di origine al trigger origin-response. 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
Puoi scegliere di fare in modo che Lambda @Edge esponga il corpo in una richiesta di HTTP metodi scrivibili (POST,PUT, e così via)DELETE, in modo da potervi accedere nella funzione Lambda. È possibile scegliere le autorizzazioni di accesso in sola lettura, oppure è possibile specificare che sarà possibile sostituire il corpo.
Per abilitare questa opzione, scegli Include Body quando crei un CloudFront trigger per la tua funzione che riguarda una richiesta del visualizzatore o un evento di richiesta 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.