Gestione della durata di permanenza dei contenuti nella cache (scadenza) - 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à.

Gestione della durata di permanenza dei contenuti nella cache (scadenza)

Puoi controllare per quanto tempo i file rimangono in una cache CloudFront prima che CloudFront inoltri un’altra richiesta all’origine. Riducendo la durata, puoi distribuire contenuti dinamici. Aumentando la durata, gli utenti otterranno prestazioni migliori, poiché è più probabile che i file vengano distribuiti direttamente dalla cache edge. Una durata maggiore riduce anche il carico sul server di origine.

In genere, CloudFront distribuisce un file da una posizione edge fino alla scadenza della durata della cache indicata, cioè fino alla scadenza del file. Dopo la scadenza, la volta successiva in cui la posizione edge riceve una richiesta per il file da parte di un utente, CloudFront inoltra la richiesta all’origine per verificare che la cache contenga l’ultima versione del file. La risposta dall’origine dipende dall’eventuale modifica del file:

  • Se la cache di CloudFront ha già l’ultima versione, l’origine restituisce il codice di stato 304 Not Modified.

  • Se la cache di CloudFront non ha l’ultima versione, l’origine restituisce un codice di stato 200 OK e l’ultima versione del file.

Se un file in una posizione edge non viene richiesto frequentemente, CloudFront potrebbe eliminarlo, ovvero cancellarlo prima della sua data di scadenza, per fare spazio a file richiesti più di recente.

Ti consigliamo di gestire la durata della cache aggiornando la policy della cache della distribuzione. Se scegli di non utilizzare una policy della cache, il TTL (Time to Live) predefinito è di 24 ore, ma puoi aggiornare le seguenti impostazioni per sovrascrivere il valore predefinito:

Per ulteriori informazioni su come Minimum TTL (TTL minimo), Default TTL (TTL predefinito) e Maximum TTL (TTL massimo) interagiscono con le direttive max-age e s-maxage e il campo intestazione Expires, consulta Specifica dell’intervallo di tempo durante il quale CloudFront memorizza nella cache gli oggetti.

Puoi anche controllare per quanto tempo gli errori (ad esempio, 404 Not Found) rimangono nella cache di CloudFront prima che CloudFront provi di nuovo a richiedere l’oggetto inoltrando un’altra richiesta all’origine. Per ulteriori informazioni, consulta In che modo CloudFront elabora i codici di stato HTTP 4xx e 5xx dalla tua origine.

Utilizzo delle intestazioni per controllare la durata della cache per i singoli oggetti

Puoi utilizzare le intestazioni Cache-Control e Expires per controllare la durata della permanenza degli oggetti nella cache. Anche le impostazioni per Minimum TTL (TTL minimo), Default TTL (TTL predefinito) e Maximum TTL (TTL massimo) influiscono sulla durata della cache, ma qui di seguito trovi una panoramica su come le intestazioni abbiano un impatto sulla durata della cache:

  • La direttiva Cache-Control max-age consente di specificare il periodo di tempo (in secondi) durante il quale desideri che un oggetto rimanga nella cache prima che CloudFront ottenga di nuovo l’oggetto dal server di origine. Il tempo di scadenza minimo supportato da CloudFront è 0 secondi. Il valore massimo è 100 anni. Specifica il valore nel seguente formato:

    Cache-Control: max-age=secondi

    Ad esempio, in base alla seguente direttiva, CloudFront manterrà l’oggetto associato nella cache per 3600 secondi (un’ora):

    Cache-Control: max-age=3600

    Se desideri che gli oggetti rimangano nelle edge cache di CloudFront per una durata diversa rispetto a quella di permanenza nelle cache dei browser, puoi utilizzare le direttive Cache-Control max-age e Cache-Control s-maxage insieme. Per ulteriori informazioni, consulta Specifica dell’intervallo di tempo durante il quale CloudFront memorizza nella cache gli oggetti.

  • Il campo intestazione Expires consente di specificare una data di scadenza e un orario utilizzando il formato specificato in RFC 2616, Hypertext Transfer Protocol - HTTP/1.1 Sezione 3.3.1, Data completa, ad esempio:

    Sat, 27 Jun 2015 23:59:59 GMT

Ti consigliamo di utilizzare la direttiva Cache-Control max-age invece del campo dell’intestazione Expires per controllare la memorizzazione nella cache dell’oggetto. Se specifichi i valori sia per Cache-Control max-age sia per Expires, CloudFront utilizza solo il valore di Cache-Control max-age.

Per ulteriori informazioni, consulta Specifica dell’intervallo di tempo durante il quale CloudFront memorizza nella cache gli oggetti.

Non puoi utilizzare i campi di intestazione Cache-Control o Pragma HTTP in una richiesta GET da un visualizzatore per forzare CloudFront a tornare al server di origine per l’oggetto. CloudFront ignora tali campi di intestazione nelle richieste dei visualizzatori.

Per ulteriori informazioni sui campi delle intestazioni Cache-Control e Expires, consulta le seguenti sezioni in RFC 2616, Hypertext Transfer Protocol - HTTP/1.1:

Fornire contenuti obsoleti (scaduti)

CloudFront supporta le direttive di controllo della cache Stale-While-Revalidate e Stale-If-Error. Puoi utilizzare queste direttive per specificare per quanto tempo i contenuti obsoleti rimangono disponibili per i visualizzatori.

Stale-While-Revalidate

Questa direttiva consente a CloudFront di fornire contenuti obsoleti dalla cache mentre CloudFront recupera in modo asincrono una versione aggiornata dall’origine. Ciò migliora la latenza poiché i visualizzatori ricevono risposte immediate dalle posizioni edge senza dover attendere il recupero in background. I nuovi contenuti vengono caricati in background per le richieste future.

Esempio Ad esempio: Stale-While-Revalidate

CloudFront esegue le seguenti operazioni quando si imposta l’intestazione Cache-Control per utilizzare queste direttive.

Cache-Control: max-age=3600, stale-while-revalidate=600
  1. CloudFront memorizzerà nella cache una risposta per un’ora (max-age=3600).

  2. Se dopo questa durata viene effettuata una richiesta, CloudFront fornisce i contenuti non aggiornati inviando contemporaneamente una richiesta all’origine per riconvalidare e aggiornare i contenuti memorizzati nella cache.

  3. Durante la riconvalida dei contenuti, CloudFront fornisce i contenuti obsoleti fino a 10 minuti (stale-while-revalidate=600).

Nota

CloudFront fornirà il contenuto obsoleto fino al valore della direttiva stale-while-revalidate o al valore del TTL massimo di CloudFront, a seconda di quale dei due è inferiore. Dopo la durata massima del TTL, l’oggetto obsoleto non sarà più disponibile dalla cache edge, indipendentemente dal valore stale-while-revalidate.

Stale-If-Error

Questa direttiva consente a CloudFront di fornire contenuti obsoleti dalla cache se l’origine non è raggiungibile o restituisce un codice di errore compreso tra 500 e 600. Ciò garantisce che i visualizzatori possano accedere ai contenuti anche durante un’interruzione dell’origine.

Esempio Ad esempio: Stale-If-Error

CloudFront esegue le seguenti operazioni quando si imposta l’intestazione Cache-Control per utilizzare queste direttive.

Cache-Control: max-age=3600, stale-if-error=86400
  1. CloudFront memorizza nella cache la risposta per un’ora (max-age=3600).

  2. Se l’origine è inattiva o restituisce un errore dopo questa durata, CloudFront continua a fornire i contenuti obsoleti per un massimo di 24 ore (stale-if-error=86400)

  3. Se sono state configurate risposte di errore personalizzate, CloudFront tenterà di fornire il contenuto obsoleto se si verifica un errore entro la durata stale-if-error specificata. Se i contenuti obsoleti non sono disponibili, CloudFront fornirà le risposte di errore personalizzate configurate per il codice di stato di errore corrispondente. Per ulteriori informazioni, consulta Generazione di risposte di errore personalizzate.

Note
  • CloudFront fornirà il contenuto obsoleto fino al valore della direttiva stale-if-error o al valore del TTL massimo di CloudFront, a seconda di quale dei due è inferiore. Dopo la durata massima del TTL, l’oggetto obsoleto non sarà più disponibile dalla cache edge, indipendentemente dal valore stale-if-error.

  • Se non si configurano risposte stale-if-error o risposte di errore personalizzate, CloudFront restituirà l’oggetto obsoleto o inoltrerà la risposta di errore al visualizzatore, a seconda che l’oggetto richiesto sia presente o meno nella cache edge. Per ulteriori informazioni, consulta Come CloudFront elabora gli errori se non hai configurato pagine di errore personalizzate.

Utilizzo di entrambe le direttive

stale-while-revalidate e stale-if-error sono entrambe direttive di controllo della cache indipendenti che possono essere utilizzate insieme per ridurre la latenza e aggiungere un buffer affinché l’origine risponda o venga ripristinata.

Esempio: utilizzo di entrambe le direttive

CloudFront esegue le seguenti operazioni quando si imposta l’intestazione Cache-Control per utilizzare le seguenti direttive.

Cache-Control: max-age=3600, stale-while-revalidate=600, stale-if-error=86400
  1. CloudFront memorizza nella cache la risposta per un’ora (max-age=3600).

  2. Se si effettuata una richiesta dopo questo durata, CloudFront fornisce i contenuti non aggiornati per un massimo di 10 minuti (stale-while-revalidate=600) mentre i contenuti vengono riconvalidati.

  3. Se il server di origine restituisce un errore mentre CloudFront tenta di riconvalidare i contenuti, CloudFront continuerà a fornire i contenuti non aggiornati per un massimo di 24 ore (stale-if-error=86400).

Il caching è un equilibrio tra prestazioni e dati aggiornati. L’uso di direttive come stale-while-revalidate e stale-if-error può migliorare le prestazioni e l’esperienza utente, ma è necessario assicurarsi che le configurazioni siano in linea con l’aggiornamento desiderato dei contenuti. Le direttive sui contenuti non aggiornati sono più adatte per i casi d’uso in cui i contenuti devono essere aggiornati ma la disponibilità della versione più recente non è essenziale. Inoltre, se i contenuti non cambiano o cambiano raramente, stale-while-revalidate potrebbe aggiungere richieste di rete non necessarie. Prendere invece in considerazione l’impostazione di una lunga durata della cache.

Specifica dell’intervallo di tempo durante il quale CloudFront memorizza nella cache gli oggetti

Per controllare la quantità di tempo in cui CloudFront mantiene un oggetto nella cache prima di inviare un’altra richiesta all’origine, è possibile:

  • Impostare i valori TTL minimo, massimo e predefinito nel comportamento della cache di una distribuzione CloudFront. È possibile impostare questi valori in una policy di cache collegata al comportamento della cache (scelta consigliata) o nelle impostazioni della cache legacy.

  • Includere l’intestazione Cache-Control o Expires nelle risposte dall’origine. Queste intestazioni consentono inoltre di determinare per quanto tempo un browser mantiene un oggetto nella cache del browser prima di inviare un’altra richiesta a CloudFront.

Nella tabella seguente viene illustrato come le intestazioni Cache-Control e Expires inviate dall’origine funzionano insieme alle impostazioni TTL in un comportamento di cache per influire sulla memorizzazione nella cache.

Intestazioni di origine TTL minimo = 0 TTL minimo = 0

L’origine aggiunge una direttiva Cache-Control: max-age all’oggetto

Caching CloudFront

CloudFront memorizza nella cache l’oggetto per il valore minimo della direttiva Cache-Control: max-age o per il valore TTL massimo CloudFront.

Caching del browser

I browser memorizzano nella cache l’oggetto per il valore della direttiva Cache-Control: max-age.

Caching CloudFront

Il caching di CloudFront dipende dai valori del TTL minimo e TTL massimo CloudFront e dalla direttiva Cache-Control max-age:

  • Se TTL minimo < max-age < TTL massimo, CloudFront memorizza nella cache l’oggetto per il valore della direttiva Cache-Control: max-age.

  • Se max-age < TTL minimo, allora CloudFront memorizza nella cache l’oggetto per il valore del TTL minimo CloudFront.

  • Se max-age > TTL massimo, allora CloudFront memorizza nella cache l’oggetto per il valore del TTL massimo CloudFront.

Caching del browser

I browser memorizzano nella cache l’oggetto per il valore della direttiva Cache-Control: max-age.

L’origine non aggiunge una direttiva Cache-Control: max-age all’oggetto

Caching CloudFront

CloudFront memorizza nella cache l’oggetto per il valore del TTL predefinito CloudFront.

Caching del browser

Dipende dal browser.

Caching CloudFront

CloudFront memorizza nella cache l’oggetto per il valore maggiore del TTL minimo o del TTL predefinito CloudFront.

Caching del browser

Dipende dal browser.

L’origine aggiunge le direttive Cache-Control: max-age e Cache-Control: s-maxage all’oggetto

Caching CloudFront

CloudFront memorizza nella cache l’oggetto per il valore minimo della direttiva Cache-Control: s-maxage o per il valore TTL massimo CloudFront.

Caching del browser

I browser memorizzano nella cache l’oggetto per il valore della direttiva Cache-Control max-age.

Caching CloudFront

Il caching di CloudFront dipende dai valori del TTL minimo e TTL massimo CloudFront e dalla direttiva Cache-Control: s-maxage:

  • Se TTL minimo < s-maxage < TTL massimo, CloudFront memorizza nella cache l’oggetto per il valore della direttiva Cache-Control: s-maxage.

  • Se s-maxage < TTL minimo, allora CloudFront memorizza nella cache l’oggetto per il valore del TTL minimo CloudFront.

  • Se s-maxage > TTL massimo, allora CloudFront memorizza nella cache l’oggetto per il valore del TTL massimo CloudFront.

Caching del browser

I browser memorizzano nella cache l’oggetto per il valore della direttiva Cache-Control: max-age.

L’origine aggiunge un’intestazione Expires all’oggetto

Caching CloudFront

CloudFront memorizza nella cache l’oggetto fino alla data dell’intestazione Expires o al valore del TTL massimo di CloudFront, a seconda di quale dei due si verifica prima.

Caching del browser

I browser memorizzano nella cache l’oggetto fino alla data presente nell’intestazione Expires.

Caching CloudFront

Il caching di CloudFront dipende dai valori del TTL minimo e TTL massimo CloudFront e dall’intestazione Expires:

  • Se TTL minimo < Expires < TTL massimo, CloudFront memorizza nella cache l’oggetto fino alla data e all’ora presente nell’intestazione Expires.

  • Se Expires < TTL minimo, allora CloudFront memorizza nella cache l’oggetto per il valore del TTL minimo CloudFront.

  • Se Expires > TTL massimo, allora CloudFront memorizza nella cache l’oggetto per il valore del TTL massimo CloudFront.

Caching del browser

I browser memorizzano nella cache l’oggetto fino alla data e all’ora presenti nell’intestazione Expires.

L’origine aggiunge le direttive Cache-Control: no-cache, no-store e/o private all’oggetto

CloudFront e i browser rispettano le intestazioni.

Caching CloudFront

CloudFront memorizza nella cache l’oggetto per il valore del TTL minimo CloudFront. Consulta l’avviso sotto questa tabella.

Caching del browser

I browser rispettano le intestazioni.

avvertimento
  • Se il TTL minimo è maggiore di 0, CloudFront utilizza il TTL minimo della policy della cache, anche se le direttiveno-store, private e/o Cache-Control: no-cache sono presenti nelle intestazioni di origine.

    • Se l’origine è raggiungibile, CloudFront ottiene l’oggetto dall’origine e lo restituisce al visualizzatore.

    • Se l’origine non è raggiungibile e il valore TTL minimo o massimo è maggiore di 0, CloudFront servirà l’oggetto ottenuto dall’origine in precedenza.

    Per evitare questo comportamento, includere la direttiva Cache-Control: stale-if-error=0 con l’oggetto restituito dall’origine. Ciò fa sì che, se l’origine non è raggiungibile, CloudFront restituisca un errore in risposta a richieste future piuttosto che l’oggetto ottenuto dall’origine in precedenza.

  • CloudFront non memorizza nella cache il codice di stato HTTP 501 (Non implementato) da un’origine S3 quando le intestazioni dell’origine includono le direttive Cache-Control: no-cache, no-store e/o private. Questo è il comportamento predefinito per un’origine S3, anche se l’impostazione TTL minima è maggiore di 0.

Per informazioni su come modificare le impostazioni per le distribuzioni utilizzando la console CloudFront, consulta Aggiornamento di una distribuzione. Per informazioni su come modificare le impostazioni per le distribuzioni utilizzando le API CloudFront, consulta UpdateDistribution.

Aggiunta di intestazioni agli oggetti tramite l’utilizzo della console Amazon S3

Puoi aggiungere il campo di intestazione Expires o Cache-Control agli oggetti Amazon S3. Per farlo, è necessario modificare i campi dei metadati dell’oggetto.

Come aggiungere il campo di intestazione Expires o Cache-Control agli oggetti Amazon S3
  1. Segui la procedura nella sezione Sostituzione dei metadati definiti dal sistema nell’argomento Modifica dei metadati degli oggetti nella console Amazon S3 nella Guida per l’utente di Amazon S3.

  2. Per Chiave, scegli il nome dell’intestazione che stai aggiungendo (Cache-Control o Scadenze).

  3. In Value (Valore)immetti un valore di intestazione. Ad esempio, per un’intestazione Cache-Control, è possibile immettere max-age=86400. Per Expires, è possibile inserire una data di scadenza e un’ora ad esempio Wed, 30 Jun 2021 09:28:00 GMT.

  4. Segui il resto della procedura per salvare le modifiche apportate ai metadati.