Lavora con richieste e risposte - Amazon CloudFront

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:

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:

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

L'eventuale corpo che si desidera CloudFront restituire nella risposta generata.

bodyEncoding

La codifica per il valore che hai specificato in body. Le uniche codifiche valide sono text e base64. Se includete body nell'responseoggetto ma lo omettetebodyEncoding, CloudFront considera il corpo come testo.

Se si specifica bodyEncoding come base64 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 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"] o headers["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 esempio accept o 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

Codice di stato HTTP . Fornisci il codice di stato come stringa. CloudFront utilizza il codice di stato fornito per quanto segue:

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

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 abilitare questa opzione, scegli Includi 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.