Service de fichiers compressés - Amazon CloudFront

Service de fichiers compressés

Vous pouvez configurer CloudFront pour qu'il compresse automatiquement certains fichiers en particulier et serve les fichiers compressés lorsque la demande de l'utilisateur inclut Accept-Encoding: gzip dans son en-tête. Lorsque le contenu est compressé, les téléchargements sont beaucoup plus rapides, parce que les fichiers sont plus petits (dans certains cas, inférieurs à un quart de la taille du fichier original). Notamment pour les fichiers JavaScript et CSS, un téléchargement plus rapide se traduit pour vos utilisateurs par un affichage plus rapide des pages web. De plus, comme le coût du transfert de données CloudFront repose sur la quantité totale de données servies, la remise de fichiers compressés est moins onéreuse que celle de fichiers non compressés.

Important

Une demande d'utilisateur doit inclure Accept-Encoding: gzip dans son en-tête, sans quoi CloudFront ne compresse pas le fichier demandé.

Si vous utilisez une origine Amazon S3 ou personnalisée, vous pouvez la configurer pour compresser les fichiers avec ou sans compression CloudFront. Votre origine peut compresser les types de fichier que CloudFront ne compresse pas. (Voir Types de fichier que CloudFront compresse.) Si votre origine retourne un fichier compressé à CloudFront, CloudFront détecte que le fichier est compressé en fonction de la valeur de l'en-tête Content-Encoding et ne compresse pas à nouveau le fichier.

Configuration d'une distribution CloudFront pour compresser le contenu

Pour configurer une distribution afin de compresser votre contenu, mettez à jour les comportements de cache que vous souhaitez pour diffuser le contenu compressé à l'aide d'une des méthodes suivantes :

  • Console CloudFront – Mettez à jour le paramètre Compress objects automatically (Compresser automatiquement les objets). Pour plus d'informations, consultez Création d'une distribution.

  • API CloudFront – Modifiez la valeur de l'élément Compress en true. Pour plus d'informations, consultez les articles CreateDistribution ou UpdateDistribution.

  • L'un des kits SDK AWS – Consultez la documentation relative aux kits SDK sur la page Documentation AWS.

  • Interface de ligne de commande AWS – Pour plus d'informations, consultez create-distribution ou update-distribution dans le AWS CLI Command Reference.

Utilisation de CloudFront pour compresser votre contenu

CloudFront peut compresser les fichiers pour les origines Amazon S3 et pour les origines personnalisées. Lorsque vous configurez CloudFront pour compresser votre contenu, vous spécifiez le paramètre dans vos comportements de cache.

Lorsque vous configurez CloudFront pour compresser votre contenu, voici comment CloudFront sert votre contenu :

  1. Vous créez ou mettez à jour une distribution CloudFront et configurez CloudFront pour compresser le contenu.

  2. un utilisateur demande un fichier. Elle ajoute l'en-tête Accept-Encoding: gzip à la demande. Cela signifie qu'elle prend en charge le contenu compressé.

  3. A l'emplacement périphérique, CloudFront contrôle le cache d'une version compressée du fichier référencé dans la demande.

  4. Si le fichier compressé se trouve déjà dans le cache, CloudFront retourne le fichier à l'utilisateur et ignore les étapes restantes.

  5. Dans le cas contraire, CloudFront achemine la demande au serveur d'origine, qui peut être un compartiment Amazon S3 ou une origine personnalisée.

    Note

    Si CloudFront possède une version non compressée du fichier dans le cache, il transmet alors une demande à l'origine.

  6. Le serveur d'origine retourne à CloudFront une version non compressée du fichier demandé.

  7. CloudFront détermine si le fichier peut être compressé :

    • Le fichier doit être d'un type que CloudFront compresse.

    • La taille du fichier doit être comprise entre 1 000 et 10 000 000 octets.

    • La réponse doit inclure un en-tête Content-Length afin que CloudFront puisse déterminer si la taille du fichier se trouve dans la plage que CloudFront compresse. Si l'en-tête Content-Length est manquant, CloudFront ne compresse pas le fichier.

    • La réponse ne doit pas inclure d'en-tête Content-Encoding.

  8. Si le fichier peut être compressé, CloudFront le compresse, retourne le fichier compressé à l'utilisateur et l'ajoute au cache.

  9. l'utilisateur décompresse le fichier.

Notez bien ce qui suit :

Types de fichier que CloudFront compresse

CloudFront compresse des fichiers d'un grand nombre de types de fichier. Pour obtenir la liste complète, consultez Types de fichier que CloudFront compresse.

Tailles de fichier que CloudFront compresse

CloudFront compresse les fichiers dont la taille est comprise entre 1 000 octets et 10 000 000 octets.

En-tête Content-Length

L'origine doit inclure un en-tête Content-Length dans la réponse afin que CloudFront puisse déterminer si la taille du fichier se trouve dans la plage que CloudFront compresse. Si l'en-tête Content-Length est manquant, CloudFront ne compresse pas le fichier.

En-tête Etag

Si vous configurez CloudFront de façon à compresser le contenu, CloudFront supprime l'en-tête de réponse ETag des fichiers qu'il compresse. Lorsque l'en-tête ETag est présent, CloudFront et votre origine peuvent l'utiliser pour déterminer si la version d'un fichier d'un cache périphérique CloudFront est identique à la version du serveur d'origine. Cependant, après la compression, les deux versions ne sont plus identiques. En conséquence, quand un fichier compressé expire et que CloudFront transmet une autre demande à votre origine, celle-ci retourne toujours le fichier à CloudFront au lieu d'un code d'état HTTP 304 (Non modifié).

Contenu déjà présent dans les emplacements périphériques lorsque vous configurez CloudFront pour compresser les fichiers

CloudFront compresse les fichiers dans chaque emplacement périphérique lorsqu'il obtient les fichiers depuis votre origine. Lorsque vous configurez CloudFront pour compresser le contenu, les fichiers qui se trouvent déjà dans les emplacements périphériques ne sont pas compressés. De plus, quand un fichier expire dans un emplacement périphérique et que CloudFront transmet une autre demande du fichier à votre origine, CloudFront ne compresse pas le fichier si votre origine retourne un code d'état HTTP 304, qui signifie que l'emplacement périphérique a déjà la dernière version du fichier. Si vous voulez que CloudFront compresse les fichiers qui se trouvent déjà dans les emplacements périphériques, vous devez invalider ces fichiers. Pour plus d'informations, consultez Invalidation de fichiers.

L'origine personnalisée est déjà configurée pour compresser les fichiers

Si vous configurez CloudFront pour compresser les fichiers et que CloudFront transmet les demandes à une origine personnalisée qui est également configurée pour compresser les fichiers, l'origine personnalisée inclut un en-tête Content-Encoding, qui indique que le fichier retourné par l'origine à CloudFront a déjà été compressé. CloudFront renvoie le fichier en cache à l'utilisateur et le met en cache à l'emplacement périphérique.

Note

CloudFront ne compresse pas les fichiers si la réponse inclut un en-tête Content-Encoding, quelle qu'en soit la valeur.

La demande n'inclut pas Accept-Encoding: gzip

Si l'en-tête Accept-Encoding est absent de la demande, CloudFront remet un contenu non compressé. Si l'en-tête Accept-Encoding inclut des valeurs supplémentaires telles que deflate ou sdch, CloudFront les supprime avant de transmettre la demande au serveur d'origine.

Demande qui utilise HTTP 1.0

Si une demande adressée à CloudFront utilise HTTP 1.0, CloudFront supprime l'en-tête Accept-Encoding et fournit du contenu non compressé.

CloudFront est occupé

Dans de rares cas, quand un emplacement périphérique CloudFront est inhabituellement occupé, certains fichiers peuvent ne pas être compressés.

Types de fichier que CloudFront compresse

Si vous configurez CloudFront de façon à compresser le contenu, CloudFront compresse les fichiers ayant les valeurs suivantes dans l'en-tête Content-Type :

  • application/dash+xml

  • application/eot

  • application/font

  • application/font-sfnt

  • application/javascript

  • application/json

  • application/opentype

  • application/otf

  • application/pkcs7-mime

  • application/rss+xml

  • application/truetype

  • application/ttf

  • application/vnd.apple.mpegurl

  • application/vnd.ms-fontobject

  • 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

Utilisation d'une origine personnalisée pour compresser le contenu

CloudFront peut compresser, à votre place, certains types de fichiers (voir Types de fichier que CloudFront compresse), à l'aide de l'algorithme de compression gzip . Néanmoins, si vous souhaitez compresser d'autres types de fichiers, ou si vous souhaitez utiliser un algorithme de compression autre que gzip , tel que brotli par exemple, vous pouvez compresser les fichiers sur votre propre serveur, puis servir les fichiers à l'aide de CloudFront.

Pour utiliser CloudFront afin de servir un fichier avec un algorithme de compression autre que gzip, configurez CloudFront pour effectuer la mise en cache en fonction de l'en-tête Accept-Encoding. Lorsque vous procédez ainsi, CloudFront n'apporte aucune modification à l'en-tête Accept-Encoding et votre origine peut retourner un fichier compressé approprié pour l'utilisateur.

Quand votre origine retourne un fichier compressé à CloudFront, insérez un en-tête Content-Encoding pour indiquer à CloudFront que le fichier est déjà compressé. Ensuite, CloudFront retourne simplement le fichier compressé à l'utilisateur.

Utilisation d'une origine Amazon S3 pour compresser le contenu

Lorsque vous utilisez Amazon S3 pour stocker votre contenu, vous pouvez faire appel à CloudFront pour compresser le contenu si vous souhaitez utiliser l'algorithme de compression gzip . Mais vous pouvez également utiliser d'autres algorithmes de compression, tels que brotli , à la place de gzip ou en plus de gzip .

Une fois que vous avez compressé les fichiers, vous pouvez les traiter avec CloudFront en procédant de la façon suivante, par exemple :

  • Configurez CloudFront pour effectuer la mise en cache en fonction de l'en-tête Accept-Encoding.

  • À l'aide d'une fonction Lambda@Edge qui se déclenche sur les demandes d'origine, modifiez l' URI de sorte qu'elle dirige vers le fichier compressé que vous souhaitez retourner, en fonction de l'en-tête Accept-Encoding.

  • Ajoutez des métadonnées de codage de contenu à des fichiers que vous stockez sur S3 pour que l'utilisateur puisse déterminer le format du fichier compressé. Pour plus d'informations, consultez Comment ajouter des métadonnées à un objet S3 ? dans le Amazon Simple Storage Service Guide de l'utilisateur de la console.

Remise de fichiers compressés quand votre serveur d'origine exécute IIS

Par défaut, IIS ne remet pas de contenu compressé aux demandes qui parviennent de serveurs proxy tels que CloudFront. Si vous utilisez IIS et si vous avez configuré IIS pour compresser le contenu en utilisant l'élément httpCompression, modifiez la valeur de l'attribut noCompressionForProxies en spécifiant false de telle sorte qu'IIS retourne le contenu compressé à CloudFront.

De plus, si vous avez des objets compressés qui sont demandés moins fréquemment qu'à quelques secondes d'intervalle, vous devrez peut-être modifier les valeurs de frequentHitThreshold et frequentHitTimePeriod.

Pour plus d'informations, consultez la documentation IIS sur le site web Microsoft.

Remise de fichiers compressés quand votre serveur d'origine exécute NGINX

Quand CloudFront transmet une demande au serveur d'origine, il inclut un en-tête Via . Il s'ensuit que NGINX interprète la demande comme traitée par proxy et, par défaut, NGINX désactive la compression pour les demandes traitées par proxy. Si votre version de NGINX inclut le paramètre gzip_proxied, modifiez la valeur en any de telle sorte que NGINX retourne le contenu compressé à CloudFront. Pour plus d'informations, consultez la documentation NGINX relative au module ngx_http_gzip_module.