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 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 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 dell'headersoggetto 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"] 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(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:

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:

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.