Comprensione della chiave della cache - 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à.

Comprensione della chiave della cache

La chiave cache determina se una richiesta del visualizzatore a una edge location CloudFront genera una occorrenza della cache. La chiave cache è l'identificatore univoco per un oggetto nella cache. Ogni oggetto nella cache ha una chiave cache univoca.

Un hit della cache si verifica quando una richiesta diel visualizzatore genera la stessa chiave di cache di una richiesta precedente e l'oggetto per tale chiave di cache si trova nella cache della posizione edge ed è valido. In presenza di un'occorrenza nella cache, l'oggetto richiesto viene servito al visualizzatore da una edge location CloudFront, che presenta i seguenti vantaggi:

  • Carico ridotto sul server di origine

  • Latenza ridotta per il visualizzatore

È possibile ottenere prestazioni migliori dal sito Web o dall'applicazione quando si dispone di un rapporto di hit della cache più elevato (una percentuale maggiore di richieste di visualizzatori che si traducono in un hit della cache). Un modo per migliorare il rapporto di accesso alla cache consiste nell'includere solo i valori minimi necessari nella chiave della cache. Per ulteriori informazioni, consultare le sezioni indicate di seguito.

È possibile modificare i valori (stringhe di query URL, intestazioni HTTP e cookie) nella chiave della cache utilizzando una policy della cache. Puoi anche modificare la chiave della cache utilizzando una funzione Lambda@Edge o una funzione CloudFront su una richiesta visualizzatore. Prima di modificare la chiave della cache, è importante capire come è stata progettata l'applicazione e quando e come potrebbe servire risposte diverse in base alle caratteristiche della richiesta del visualizzatore. Quando un valore nella richiesta del visualizzatore determina la risposta restituita dall'origine, è necessario includere tale valore nella chiave della cache. Ma se includi un valore nella chiave della cache che non influisce sulla risposta restituita dall'origine, potresti finire per memorizzare nella cache oggetti duplicati.

Chiave della cache predefinita

Per impostazione predefinita, la chiave della cache per una distribuzione CloudFront include le seguenti informazioni:

  • Il nome di dominio della distribuzione CloudFront (ad esempio, d1111abcdef8.cloudfront.net)

  • Il percorso URL dell'oggetto richiesto (ad esempio, /content/stories/example-story.html)

Nota

Il metodo OPTIONS è incluso nella chiave cache per le richieste OPTIONS. Ciò significa che le risposte alle richieste OPTIONS vengono memorizzate nella cache separatamente dalle risposte alle richieste GET e HEAD.

Altri valori della richiesta del visualizzatore non sono inclusi nella chiave cache, per impostazione predefinita. Si consideri la seguente richiesta HTTP da un browser Web.

GET /content/stories/example-story.html?ref=0123abc&split-pages=false HTTP/1.1 Host: d111111abcdef8.cloudfront.net User-Agent: Mozilla/5.0 Gecko/20100101 Firefox/68.0 Accept: text/html,*/* Accept-Language: en-US,en Cookie: session_id=01234abcd Referer: https://news.example.com/

Quando una richiesta del visualizzatore come questa arriva in una posizione edge di CloudFront, CloudFront utilizza la chiave cache per determinare se esiste un'occorrenza nella cache. Per impostazione predefinita, solo i seguenti componenti della richiesta sono inclusi nella chiave cache: /content/stories/example-story.html e d111111abcdef8.cloudfront.net. Se l'oggetto richiesto non è nella cache (una mancata cache), CloudFront invia una richiesta all'origine per ottenere l'oggetto. Dopo aver ottenuto l'oggetto, CloudFront lo restituisce al visualizzatore e lo memorizza nella cache della edge location.

Quando CloudFront riceve un'altra richiesta per lo stesso oggetto, come determinato dalla chiave cache, CloudFront serve immediatamente l'oggetto memorizzato nella cache al visualizzatore, senza inviare una richiesta all'origine. Ad esempio, si consideri la seguente richiesta HTTP che viene dopo la richiesta precedente.

GET /content/stories/example-story.html?ref=xyz987&split-pages=true HTTP/1.1 Host: d111111abcdef8.cloudfront.net User-Agent: Mozilla/5.0 AppleWebKit/537.36 Chrome/83.0.4103.116 Accept: text/html,*/* Accept-Language: en-US,en Cookie: session_id=wxyz9876 Referer: https://rss.news.example.net/

Questa richiesta è per lo stesso oggetto della richiesta precedente, ma è diversa dalla richiesta precedente. Ha una stringa di query URL diversa, diverse intestazioni User-Agent e Referer e un cookie session_id diverso. Tuttavia, nessuno di questi valori fa parte della chiave cache per impostazione predefinita, quindi questa seconda richiesta genera un hit della cache.

Personalizzazione della chiave della cache

In alcuni casi, è possibile includere ulteriori informazioni nella chiave della cache, anche se ciò potrebbe comportare un minor numero di accessi della cache. È possibile specificare cosa includere nella chiave della cache utilizzando una policy della cache.

Ad esempio, se il server di origine utilizza l'intestazione Accept-Language HTTP nelle richieste del visualizzatore per restituire contenuti diversi in base alla lingua del visualizzatore, è possibile includere questa intestazione nella chiave cache. Quando si esegue questa operazione, CloudFront utilizza questa intestazione per determinare le occorrenze nella cache e include l'intestazione nelle richieste di origine (richieste che CloudFront invia all'origine quando c'è una mancanza di cache).

Una potenziale conseguenza dell'inclusione di valori aggiuntivi nella chiave cache è che CloudFront potrebbe finire per memorizzare nella cache oggetti duplicati a causa della variazione che può verificarsi nelle richieste del visualizzatore. Ad esempio, i visualizzatori potrebbero inviare uno dei seguenti valori per l'intestazione Accept-Language:

  • en-US,en

  • en,en-US

  • en-US, en

  • en-US

Tutti questi valori diversi indicano che la lingua del visualizzatore è l'inglese, ma la variazione può costringere CloudFront a creare la cache dello stesso oggetto più volte. Ciò può ridurre gli accessi della cache e aumentare il numero di richieste di origine. È possibile evitare questa duplicazione non includendo l'intestazione Accept-Language nella chiave cache e configurando invece il sito Web o l'applicazione per utilizzare URL diversi per il contenuto in lingue diverse (ad esempio /en-US/content/stories/example-story.html).

Per qualsiasi valore specificato che si intende includere nella chiave cache, è necessario assicurarsi di comprendere quante diverse varianti di tale valore potrebbero apparire nelle richieste del visualizzatore. Per alcuni valori di richiesta, raramente ha senso includerli nella chiave della cache. Ad esempio, l'intestazione User-Agent può avere migliaia di varianti univoche, quindi in genere non è un buon candidato per l'inclusione nella chiave della cache. I cookie che hanno valori specifici dell'utente o specifici della sessione e sono univoci per migliaia (o addirittura milioni) di richieste non sono buoni candidati per l'inclusione della chiave della cache. Se si includono questi valori nella chiave cache, ogni variazione univoca genera un'altra copia dell'oggetto nella cache. Se queste copie dell'oggetto non sono univoche o se si finisce con un numero così elevato di oggetti leggermente diversi che ogni oggetto ottiene solo un piccolo numero di hit della cache, è possibile considerare un approccio diverso. È possibile escludere questi valori altamente variabili dalla chiave della cache oppure è possibile contrassegnare gli oggetti come non memorizzabili nella cache.

Prestare attenzione quando si personalizza la chiave della cache. A volte è auspicabile, ma può avere conseguenze indesiderate come la memorizzazione nella cache di oggetti duplicati, l'abbassamento del rapporto di accesso alla cache e l'aumento del numero di richieste di origine. Se il sito Web o l'applicazione di origine deve ricevere determinati valori dalle richieste dei visualizzatori per analisi, telemetria o altri usi, ma questi valori non modificano l'oggetto restituito dall'origine, utilizzare una policy di richiesta origine per includere questi valori nelle richieste di origine ma non includerli nella chiave della cache.