Distribuzione di file compressi - Amazon CloudFront

Distribuzione di file compressi

Quando gli oggetti richiesti sono compressi, i download possono essere più rapidi in quanto gli oggetti sono più piccoli; in alcuni casi, meno di un quarto della dimensione originale. Download più veloci possono comportare un rendering più rapido delle pagine web per i visitatori, in particolare per i file JavaScript e CSS. Inoltre, il costo del trasferimento dati CloudFront si basa sulla quantità totale di dati forniti. La distribuzione di oggetti compressi può essere meno costosa rispetto alla distribuzione di oggetti non compressi.

Configurazione di CloudFront per comprimere oggetti

Per configurare CloudFront in modo da comprimere gli oggetti, aggiorna il comportamento cache che desideri utilizzare per servire gli oggetti compressi.

Come configurare CloudFront per comprimere oggetti (console)
  1. Accedi alla Console CloudFront.

  2. Scegli la distribuzione, quindi seleziona il comportamento da modificare.

  3. Per l’impostazione Comprimi oggetti automaticamente, scegli .

  4. Usa una policy della cache per specificare le impostazioni di caching e abilita entrambi i formati di compressione Gzip e Brotli.

Note
  • Per utilizzare la compressione Brotli sono richieste policy della cache. Brotli non supporta le impostazioni cache legacy.

  • Per abilitare la compressione utilizzando CloudFormation o l’API CloudFront, imposta i parametri Compress, EnableAcceptEncodingGzip, EnableAcceptEncodingBrotli su true.

Per comprendere come CloudFront comprime gli oggetti, consulta la sezione seguente.

Come funziona la compressione CloudFront

  1. Un visualizzatore richiede un oggetto. Il visualizzatore include l'intestazione Accept-Encoding HTTP nella richiesta e il valore di intestazione include gzip, br o entrambi. Questo indica che il visualizzatore supporta gli oggetti compressi. Quando il visualizzatore supporta entrambi i formati Gzip e Brotli, CloudFront utilizza Brotli.

    Nota

    I browser web Chrome e Firefox supportano la compressione Brotli solo quando la richiesta viene inviata utilizzando HTTPS. Non supportano Brotli con richieste HTTP.

  2. Nella posizione edge, CloudFront controlla la cache per una copia compressa dell'oggetto richiesto.

  3. A seconda che l’oggetto compresso sia presente o meno nella cache, CloudFront esegue una delle seguenti operazioni:

    • Se l’oggetto compresso è già nella cache, CloudFront lo invia al visualizzatore e ignora le fasi rimanenti.

    • Se l’oggetto compresso non si trova nella cache, CloudFront inoltra la richiesta all’origine.

    Nota

    Se una copia non compressa dell'oggetto è già nella cache, CloudFront potrebbe inviarla al visualizzatore senza inoltrare la richiesta all'origine. Ad esempio, ciò può verificarsi quando CloudFront ha precedentemente saltato la compressione. In questo caso, CloudFront memorizza nella cache l'oggetto non compresso e continua a servirlo fino a quando l'oggetto scade, viene espulso o viene invalidato.

  4. Se l’origine restituisce un oggetto compresso, come indicato dalla presenza di un’intestazione Content-Encoding nella risposta HTTP, CloudFront invia l’oggetto compresso al visualizzatore, lo aggiunge alla cache e ignora le fasi rimanenti. CloudFront non comprime di nuovo l'oggetto.

  5. Se l’origine restituisce a CloudFront un oggetto non compresso senza intestazione Content-Encoding nella risposta HTTP, CloudFront determina se l’oggetto può essere compresso. Per ulteriori informazioni, consulta Condizioni per la compressione.

  6. Se l’oggetto può essere compresso, CloudFront lo comprime, lo invia al visualizzatore e quindi lo aggiunge alla cache.

  7. Se ci sono richieste visualizzatore successive per lo stesso oggetto, CloudFront restituisce la prima versione memorizzata nella cache. Ad esempio, se un visualizzatore richiede un oggetto specifico memorizzato nella cache che utilizza la compressione Gzip e accetta il formato Gzip, le richieste successive allo stesso oggetto restituiranno sempre la versione Gzip, anche se il visualizzatore accetta sia Brotli che Gzip.

Alcune origini personalizzate possono anche comprimere gli oggetti. L’origine potrebbe essere in grado di comprimere oggetti non compressi da CloudFront. Per ulteriori informazioni, consulta Tipi di file che CloudFront comprime.

Condizioni per la compressione

Nell’elenco seguente vengono fornite ulteriori informazioni sugli scenari in cui CloudFront comprime gli oggetti.

La richiesta utilizza HTTP 1.0

Se una richiesta a CloudFront utilizza HTTP 1.0, CloudFront rimuove l’intestazione Accept-Encoding e non comprime l’oggetto nella risposta.

Accept-EncodingIntestazione della richiesta

Se l’intestazione Accept-Encoding non è presente nella richiesta del visualizzatore o se non contiene gzip o br come valore, CloudFront non comprime l’oggetto nella risposta. Se l'intestazione Accept-Encoding include ulteriori valori, ad esempio deflate, CloudFront li rimuove prima di inoltrare la richiesta al server di origine.

Quando CloudFront è configurato per comprimere oggetti, include automaticamente l'intestazione Accept-Encoding nella chiave cache e nelle richieste di origine.

Il contenuto è già memorizzato nella cache quando si configura CloudFront per comprimere oggetti

CloudFront comprime gli oggetti quando li ottiene dall'origine. Quando configuri CloudFront per comprimere gli oggetti, gli oggetti già memorizzati nella cache della posizione edge non vengono compressi da CloudFront. Inoltre, quando un oggetto memorizzato nella cache scade in una posizione edge e CloudFront inoltra un’altra richiesta per l’oggetto all’origine, CloudFront non comprime l’oggetto quando l’origine restituisce un codice di stato HTTP 304. Ciò significa che la posizione edge dispone già della versione più recente dell’oggetto. Se vuoi che CloudFront comprima gli oggetti già memorizzati nella cache delle posizioni edge, devi invalidare quegli oggetti. Per ulteriori informazioni, consulta Invalidare i file per rimuovere il contenuto.

L'origine è già configurata per comprimere gli oggetti

Se si configura CloudFront per comprimere gli oggetti e l’origine comprime anche gli oggetti, l’origine dovrebbe includere una intestazione Content-Encoding. Questa intestazione indica a CloudFront che l’oggetto è già compresso. Quando una risposta da un’origine include l’intestazione Content-Encoding, CloudFront non comprime l’oggetto, a prescindere dal valore dell’intestazione. CloudFront invia la risposta al visualizzatore e memorizza l'oggetto nella cache della posizione edge.

Tipi di file che CloudFront comprime

Per un elenco completo, consulta Tipi di file che CloudFront comprime.

Dimensione degli oggetti che CloudFront comprime

CloudFront comprime oggetti la cui dimensione è tra 1.000 byte e 10 milioni di byte.

Content-LengthIntestazione

L'origine deve includere un'intestazione Content-Length nella risposta di modo che CloudFront sia in grado di determinare se la dimensione dell'oggetto rientra nell'intervallo che CloudFront può comprimere. Se l’intestazione Content-Length è mancante oppure contiene un valore non valido o al di fuori dell’intervallo di dimensioni che CloudFront può comprimere, CloudFront non comprime l’oggetto. Per ulteriori informazioni su come CloudFront elabora oggetti di grandi dimensioni che possono superare l’intervallo di dimensioni, consulta Come CloudFront elabora le richieste parziali per un oggetto (range GET).

Il codice di stato HTTP per la risposta

CloudFront comprime gli oggetti solo quando il codice di stato HTTP della risposta è 200, 403 o 404.

La risposta non ha corpo

Quando la risposta HTTP dall'origine non ha corpo, non c'è nulla da comprimere per CloudFront.

ETagIntestazione

CloudFront a volte modifica l'intestazione ETag nella risposta HTTP quando comprime gli oggetti. Per ulteriori informazioni, consulta ETagConversione dell'intestazione .

CloudFront salta la compressione

CloudFront comprime gli oggetti in base al miglior tentativo. In rari casi, CloudFront non esegue la compressione di un oggetto quando registra un carico di traffico elevato. CloudFront prende questa decisione sulla base di una varietà di fattori, tra cui la capacità host. Se CloudFront salta la compressione di un oggetto, memorizza l'oggetto non compresso nella cache e continua a servirlo fino a quando l'oggetto scade, viene espulso o viene invalidato.

Tipi di file che CloudFront comprime

Se configuri CloudFront per comprimere gli oggetti, CloudFront comprime solo gli oggetti che hanno i seguenti valori nell'intestazione della risposta Content-Type:

  • application/dash+xml

  • application/eot

  • application/font

  • application/font-sfnt

  • application/javascript

  • application/json

  • application/opentype

  • application/otf

  • application/pdf

  • application/pkcs7-mime

  • application/protobuf

  • application/rss+xml

  • application/truetype

  • application/ttf

  • application/vnd.apple.mpegurl

  • application/vnd.mapbox-vector-tile

  • application/vnd.ms-fontobject

  • application/wasm

  • application/xhtml+xml

  • application/xml

  • application/x-font-opentype

  • application/x-font-truetype

  • application/x-font-ttf

  • application/x-httpd-cgi

  • application/x-javascript

  • application/x-mpegurl

  • application/x-opentype

  • application/x-otf

  • application/x-perl

  • application/x-ttf

  • font/eot

  • font/opentype

  • font/otf

  • font/ttf

  • image/svg+xml

  • text/css

  • text/csv

  • text/html

  • text/javascript

  • text/js

  • text/plain

  • text/richtext

  • text/tab-separated-values

  • text/xml

  • text/x-component

  • text/x-java-source

  • text/x-script

  • vnd.apple.mpegurl

ETagConversione dell'intestazione

Quando l'oggetto non compresso dall'origine include un'intestazione ETag HTTP valida e consolidata, e CloudFront comprime l'oggetto, CloudFront converte anche il valore dell’intestazione ETag consolidata in un ETag debole e restituisce il valore ETag debole al visualizzatore. Gli spettatori possono memorizzare il valore ETag debole e utilizzarlo per inviare richieste condizionali con l'intestazione If-None-Match HTTP. Ciò consente ai visualizzatori, CloudFront, e all'origine di trattare le versioni compresse e non compresse di un oggetto come semanticamente equivalenti, riducendo così il trasferimento di dati non necessari.

Un valore di intestazione ETag valido e consolidato inizia e termina con un carattere di virgoletta doppia ("). Per convertire il valore ETag forte in uno debole, CloudFront aggiunge i caratteri W/ all'inizio del valore forte ETag.

Quando l'oggetto dall'origine include un valore di intestazione debole ETag (un valore che inizia con i caratteri W/), CloudFront non modifica questo valore e lo restituisce al visualizzatore come ricevuto dall'origine.

Quando l'oggetto dall'origine include un valore di intestazione ETag non valido (il valore non inizia con " o con W/), CloudFront rimuove l'intestazione ETag e restituisce l'oggetto al visualizzatore senza l'intestazione di risposta ETag.

Per ulteriori informazioni, consulta le pagine seguenti nei documenti web MDN: