Caching dei contenuti in base alle intestazioni di richiesta - Amazon CloudFront

Caching dei contenuti in base alle intestazioni di richiesta

CloudFront ti consente di scegliere se desideri che CloudFront inoltri le intestazioni al server di origine e memorizzi nella cache le versioni separate di un oggetto specificato in base ai valori dell’intestazione per le richieste dei visualizzatori. In questo modo è possibile distribuire diverse versioni dei tuoi contenuti in base al dispositivo che l’utente utilizza, alla posizione del visualizzatore, al linguaggio utilizzato dal visualizzatore e a un’ampia gamma di altri criteri.

Intestazioni e distribuzioni – Panoramica

Per impostazione predefinita, CloudFront non considera le intestazioni quando memorizza nella cache gli oggetti nelle edge location. Se il server di origine restituisce due oggetti che differiscono solo in base ai valori delle intestazioni delle richieste, CloudFront memorizza nella cache solo una versione dell’oggetto.

Puoi configurare CloudFront per inoltrare le intestazioni al server di origine e ciò comporta la memorizzazione nella cache da parte di CloudFront di più versioni di un oggetto in base ai valori presenti in una o più intestazioni delle richieste. Per configurare CloudFront allo scopo di memorizzare nella cache gli oggetti in base ai valori di intestazione specifici, devi specificare le impostazioni del comportamento della cache per la tua distribuzione. Per ulteriori informazioni, consulta Cache basata su intestazioni di richiesta selezionate.

Ad esempio, supponiamo che le richieste del visualizzatore per logo.jpg contengano un’intestazione personalizzata Product con un valore di Acme o Apex. Quando configuri CloudFront per memorizzare nella cache i tuoi oggetti in base al valore dell’intestazione Product, CloudFront inoltra le richieste per logo.jpg al server di origine e include l’intestazione Product e i relativi valori. CloudFront memorizza nella cache logo.jpg una volta per le richieste in cui il valore dell’intestazione Product è Acme e una volta per le richieste in cui il valore è Apex.

Puoi configurare ogni comportamento cache in una distribuzione per eseguire una delle seguenti operazioni:

  • Inoltro di tutte le intestazioni al server di origine

    Nota

    Per impostazioni della cache legacy: se configuri CloudFront per inoltrare tutte le intestazioni alla tua origine, il servizio non memorizza nella cache gli oggetti associati al comportamento della cache, ma invia ogni richiesta all’origine.

  • Inoltro di un elenco di intestazioni da te specificata. CloudFront memorizza nella cache i tuoi oggetti in base ai valori in tutte le intestazioni specificate. CloudFront inoltra anche le intestazioni inoltrate per impostazione predefinita, ma memorizza i tuoi oggetti nella cache solo in base alle intestazioni che specifichi.

  • Inoltra solo le intestazioni predefinite. In questa configurazione, CloudFront non memorizza nella cache gli oggetti in base ai valori riportati nelle intestazioni delle richieste.

Per conoscere la quota corrente relativa al numero di intestazioni che puoi inoltrare per ogni comportamento cache o per richiedere una quota superiore, consulta Quote delle intestazioni.

Per ulteriori informazioni sull’utilizzo della console CloudFront per aggiornare una distribuzione in modo che CloudFront inoltri i cookie al server di origine, consulta Aggiornamento di una distribuzione. Per informazioni sull’utilizzo dell’API CloudFront per aggiornare una distribuzione esistente, consulta Aggiorna distribuzione nella Documentazione di riferimento dell’API di Amazon CloudFront.

Selezione delle intestazioni su cui basare il caching

Le intestazioni che puoi inoltrare al server di origine e su cui CloudFront basa il caching variano a seconda che la tua origine sia un bucket Amazon S3 o un server di origine personalizzato.

  • Amazon S3: puoi configurare CloudFront per inoltrare e memorizzare nella cache i tuoi oggetti in base a una serie di intestazioni specifiche (vedi il seguente elenco di eccezioni). Tuttavia, ti consigliamo di evitare intestazioni di inoltro con un server di origine Amazon S3, a meno che non sia necessario implementare la condivisione delle risorse multi-origine (CORS) o si desideri personalizzare il contenuto utilizzando Lambda@Edge negli eventi relativi ai server di origine.

    • Per configurare la condivisione CORS, devi inoltrare intestazioni che consentono a CloudFront di distribuire contenuti per siti Web abilitati per la condivisione di risorse multi-origine (CORS). Per ulteriori informazioni, consulta Configurazione di CloudFront per rispettare le impostazioni CORS.

    • Per personalizzare i contenuti utilizzando le intestazioni che inoltri al tuo server di origine Amazon S3, scrivi e aggiungi le funzioni Lambda@Edge e associale alla tua distribuzione CloudFront affinché possano essere attivate da un evento relativo a un server di origine. Per ulteriori informazioni sull’utilizzo delle intestazioni per personalizzare contenuti, consulta Esempi di personalizzazione del contenuto in base alle intestazioni del paese o del tipo di dispositivo.

      Consigliamo di evitare di inoltrare le intestazioni non utilizzate per personalizzare i contenuti perché inoltrare intestazioni aggiuntive può ridurre il rapporto di occorrenza nella cache. In altre parole, CloudFront non può elaborare tutte le richieste dalle cache edge, come proporzione di tutte le richieste.

  • Server di origine personalizzato - Puoi configurare CloudFront per memorizzare nella cache in base al valore di qualsiasi intestazione di richiesta, eccetto nei seguenti casi:

    • Connection

    • Cookie – Se desideri inoltrare e memorizzare nella cache in base ai cookie, devi utilizzare un’impostazione separate nella tua distribuzione. Per ulteriori informazioni, consulta Caching dei contenuti basati su cookie.

    • Host (for Amazon S3 origins)

    • Proxy-Authorization

    • TE

    • Upgrade

    Puoi configurare CloudFront per memorizzare nella cache gli oggetti in base ai valori riportati nelle intestazioni Date e User-Agent, ma non lo consigliamo. Queste intestazioni hanno numerosi valori possibili e la memorizzazione nella cache in base ai valori causerebbe l’inoltro da parte di CloudFront di molte più richieste all’origine.

Per un elenco completo di tutte le intestazioni delle richieste HTTP e per informazioni su come CloudFront le elabora, consulta Intestazioni di richieste HTTP e comportamento di CloudFront (origini Amazon S3 e personalizzate).

Configurazione di CloudFront per rispettare le impostazioni CORS

Se hai abilitato la condivisione di risorse multi-origine (CORS) su un bucket Amazon S3 o un server di origine personalizzato, devi selezionare intestazioni specifiche da inoltrare, in modo che vengano rispettate le impostazioni CORS. Le intestazioni che devi inoltrare variano a seconda del server di origine (Amazon S3 o personalizzato) e della volontà di memorizzare nella cache le risposte OPTIONS.

Amazon S3

  • Se desideri che le risposte OPTIONS vengano memorizzate nella cache, esegui le operazioni descritte di seguito:

    • Scegli le opzioni per le impostazioni predefinite di comportamento della cache che abilitano la memorizzazione nella cache per le risposte OPTIONS.

    • Configurare CloudFront per inoltrare le seguenti intestazioni: Origin, Access-Control-Request-Headers e Access-Control-Request-Method.

  • Se non desideri che le risposte OPTIONS vengano memorizzate nella cache, configura CloudFront affinché inoltri l’intestazione Origin, insieme ad altre intestazioni richieste dal server di origine (ad esempio, Access-Control-Request-Headers, Access-Control-Request-Method o altro).

Server di origine personalizzati – Inoltra l’intestazione Origin insieme a qualsiasi altra intestazione richiesta dal server di origine.

Per configurare CloudFront in modo che memorizzi nella cache le risposte basate su CORS, è necessario configurare CloudFront per inoltrare le intestazioni utilizzando una policy della cache. Per ulteriori informazioni, consulta Controllo della chiave della cache con una policy.

Per ulteriori informazioni su CORS e Amazon S3, consulta Utilizzo delle funzionalità Cross-Origin Resource Sharing (CORS) nella Guida per l’utente di Amazon Simple Storage Service.

Configurazione del caching in base al tipo di dispositivo

Se desideri che CloudFront memorizzi nella cache le diverse versioni degli oggetti in base al dispositivo utilizzato dall’utente per visualizzare i contenuti, configura CloudFront in modo che inoltri le intestazioni applicabili al tuo server di origine personalizzato:

  • CloudFront-Is-Desktop-Viewer

  • CloudFront-Is-Mobile-Viewer

  • CloudFront-Is-SmartTV-Viewer

  • CloudFront-Is-Tablet-Viewer

In base al valore dell’intestazione User-Agent, CloudFront imposta il valore di queste intestazioni su true o false prima di inoltrare la richiesta al server di origine. Se il dispositivo ricade in più di una categoria, allora più di un valore potrebbe essere true. Ad esempio, per alcuni dispositivi tablet, CloudFront potrebbe impostare CloudFront-Is-Mobile-Viewer e CloudFront-Is-Tablet-Viewer su true.

Configurazione del caching in base alla lingua del visualizzatore

Se desideri che CloudFront memorizzi nella cache le diverse versioni degli oggetti in base alla lingua specificata nella richiesta, configura CloudFront in modo che inoltri l’intestazione Accept-Language all’origine.

Configurazione del caching in base alla posizione del visualizzatore

Se desideri che CloudFront memorizzi nella cache le diverse versioni degli oggetti in base al paese da cui proviene la richiesta, configura CloudFront in modo che inoltri l’intestazione CloudFront-Viewer-Country al server di origine. CloudFront converte automaticamente l’indirizzo IP da cui proviene la richiesta in un codice paese a due lettere. Per una elenco dei codici Paese semplice da usare, ordinabile per codice e per nome paese, vedi la voce Wikipedia ISO 3166-1 alfa-2.

Configurazione del caching in base al protocollo della richiesta

Se desideri che CloudFront memorizzi nella cache le diverse versioni degli oggetti in base al protocollo della richiesta, HTTP o HTTPS, configura CloudFront in modo che inoltri l’intestazione CloudFront-Forwarded-Proto al server di origine.

Configurazione del caching per i file compressi

Se la tua origine supporta la compressione Brotli, puoi memorizzare nella cache in base all’intestazione Accept-Encoding. Configurare il caching solo in base a Accept-Encoding se l’origine distribuisce diversi contenuti in base all’intestazione.

In che modo il caching basato sulle intestazioni influenza le performance

Quando configuri CloudFront per la memorizzazione nella cache in base a una o più intestazioni e le intestazioni dispongono di più valori possibili, CloudFront inoltra più richieste al tuo server di origine per lo stesso oggetto. Questo rallenta le prestazioni e aumenta il carico di lavoro del server di origine. Se il server di origine restituisce lo stesso oggetto, indipendentemente dal valore di una determinata intestazione, ti consigliamo di non configurare CloudFront per memorizzare nella cache in base a tale intestazione.

Se configuri CloudFront per inoltrare più di un’intestazione, l’ordine delle intestazioni nelle richieste del visualizzatore non interessa il caching, a condizione che i valori sono gli stessi. Ad esempio, se una richiesta contiene le intestazioni A:1, B:2 e un’altra richiesta contiene B:2, A:1, CloudFront memorizza nella cache solo una copia dell’oggetto.

In che modo il formato delle intestazioni e dei valori delle intestazioni si ripercuotono sul caching

Quando CloudFront memorizza nella cache in base ai valori dell’intestazione, non considera il caso del nome dell’intestazione, mentre considera il caso del valore dell’intestazione:

  • Se le richieste del visualizzatore includono entrambi Product:Acme e product:Acme, CloudFront memorizza l’oggetto nella cache solo una volta. L’unica differenza tra loro è il caso del nome dell’intestazione, che non interessa la memorizzazione nella cache.

  • Se le richieste del visualizzatore includono entrambe Product:Acme e Product:acme, CloudFront memorizza un oggetto nella cache due volte, poiché il valore è Acme in alcune richieste e acme in altre.

Intestazioni che CloudFront restituisce al visualizzatore

La configurazione di CloudFront per l’inoltro e la memorizzazione nella cache delle intestazioni non influenza le intestazioni che CloudFront restituisce al visualizzatore. CloudFront restituisce tutte le intestazioni ottenute dal server di origine con poche eccezioni. Per ulteriori informazioni, consulta l’argomento applicabile: