Diffusion de fichiers compressés - Amazon CloudFront

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Diffusion de fichiers compressés

Lorsque les objets demandés sont compressés, les téléchargements peuvent être plus rapides, parce que les objets sont plus petits (dans certains cas, inférieurs à un quart de la taille de l'objet original). Des téléchargements plus rapides peuvent permettre un affichage plus rapide des pages web pour vos utilisateurs, en particulier pour les fichiers JavaScript et CSS. De plus, le coût du transfert de données CloudFront repose sur la quantité totale de données diffusées. La diffusion d’objets compressés peut être moins coûteux que la diffusion d’objets non compressés.

Configuration de CloudFront pour compresser des objets

Pour configurer CloudFront afin de compresser les objets, mettez à jour le comportement de cache à partir duquel vous souhaitez diffuser les objets compressés.

Pour configurer CloudFront pour compresser des objets (console)
  1. Connectez-vous à la console CloudFront.

  2. Choisissez votre distribution, puis le Comportement à modifier.

  3. Pour le paramètre Compresser automatiquement les objets, choisissez Oui.

  4. Utilisez une politique de cache pour spécifier les paramètres de mise en cache et activez les formats de compression Gzip et Brotli.

Remarques
  • Vous devez utiliser des politiques de cache pour utiliser la compression Brotli. Brotli ne prend pas en charge les anciens paramètres de cache.

  • Pour activer la compression à l’aide de CloudFormation ou de l’API CloudFront, définissez les paramètres Compress, EnableAcceptEncodingGzip, EnableAcceptEncodingBrotli sur true.

Pour comprendre comment CloudFront compresse les objets, consultez la section suivante.

Fonctionnement de la compression CloudFront

  1. Un utilisateur demande un objet. L'utilisateur inclut l'en-tête HTTP Accept-Encoding dans la demande et les valeurs d'en-tête incluent gzip, br ou les deux. Cela signifie qu'il prend en charge les objets compressés. Si l’utilisateur prend en charge Gzip et Brotli, CloudFront utilise Brotli.

    Note

    Les navigateurs web Chrome et Firefox prennent en charge la compression Brotli uniquement lorsque la demande est envoyée en HTTPS. Ils ne prennent pas en charge Brotli avec les demandes HTTP.

  2. À l'emplacement périphérique, CloudFront recherche dans le cache une copie compressée de l'objet demandé.

  3. En fonction de la présence ou non de l’objet compressé dans le cache, CloudFront effectue l’une des opérations suivantes :

    • Si l’objet compressé se trouve déjà dans le cache, CloudFront l’envoie à l’utilisateur et ignore les étapes restantes.

    • Si l’objet compressé ne se trouve pas dans le cache, CloudFront transmet la demande à l’origine.

    Note

    Si une copie non compressée de l'objet est déjà dans le cache, CloudFront peut l'envoyer à l'utilisateur sans transférer la demande à l'origine. Par exemple, cela peut se produire lorsque CloudFront a précédemment ignoré la compression. Lorsque cela se produit, CloudFront met en cache l'objet non compressé et continue de le servir jusqu'à ce que l'objet expire, soit expulsé ou soit invalidé.

  4. Si l’origine retourne un objet compressé, (comme indiqué par l’en-tête Content-Encoding dans la réponse HTTP), CloudFront envoie l’objet compressé à l’utilisateur, l’ajoute au cache et ignore les étapes restantes. CloudFront ne compresse pas à nouveau l'objet.

  5. Si l’origine renvoie un objet non compressé à CloudFront sans l’en-tête Content-Encoding dans la réponse HTTP, CloudFront détermine si l’objet peut être compressé. Pour plus d’informations, consultez Conditions de compression.

  6. Si l’objet peut être compressé, CloudFront le compresse, l’envoie à l’utilisateur et l’ajoute au cache.

  7. Si d’autres utilisateurs demandent ensuite le même objet, CloudFront renvoie la première version déjà mise en cache. Par exemple, si un utilisateur demande un objet spécifique mis en cache utilisant la compression Gzip et que l’utilisateur accepte le format Gzip, les demandes ultérieures pour ce même objet renverront toujours la version Gzip, même si l’utilisateur accepte à la fois Brotli et Gzip.

Certaines origines personnalisées peuvent également compresser des objets. Votre origine peut compresser des objets que CloudFront ne compresse pas. Pour plus d’informations, consultez Types de fichiers compressés par CloudFront.

Conditions de compression

La liste suivante fournit plus d’informations sur les scénarios dans lesquels CloudFront ne compresse pas d’objets.

La demande utilise HTTP 1.0

Si une demande adressée à CloudFront utilise HTTP 1.0, CloudFront supprime l’en-tête Accept-Encoding et ne compresse pas l’objet dans la réponse.

Accept-EncodingEn-tête de demande

Si l’en-tête Accept-Encoding est absent de la demande de l’utilisateur ou s’il ne contient pas gzip ou br en tant que valeur, CloudFront ne compresse pas l’objet dans la réponse. Si l'en-tête Accept-Encoding inclut des valeurs supplémentaires telles que deflate, CloudFront les supprime avant de transmettre la demande à l'origine.

Si CloudFront est configuré pour compresser des objets, il inclut l'en-tête Accept-Encoding dans la clé de cache et dans les demandes d'origine automatiquement.

Le contenu est déjà mis en cache lorsque vous configurez CloudFront pour compresser des objets

CloudFront compresse les objets lorsqu'il les obtient à partir de l'origine. Lorsque vous configurez CloudFront pour compresser les objets, CloudFront ne compresse pas ceux qui ont déjà été mis en cache dans les emplacements périphériques. De plus, quand un objet en cache expire dans un emplacement périphérique et que CloudFront transfère une autre demande de l’objet à votre origine, CloudFront ne compresse pas l’objet lorsque votre origine retourne un code d’état HTTP 304. Cela signifie que l’emplacement périphérique dispose déjà de la dernière version de l’objet. Si vous voulez que CloudFront compresse les objets qui sont déjà en cache dans les emplacements périphériques, vous devez invalider ces objets. Pour plus d'informations, consultez Invalidation de fichiers pour supprimer du contenu.

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

Si vous configurez CloudFront pour compresser les objets et que l’origine compresse également les objets, l’origine devrait inclure un en-tête Content-Encoding. Cet en-tête indique à CloudFront que l’objet est déjà compressé. CloudFront ne compresse pas l’objet si la réponse d’une origine inclut l’en-tête Content-Encoding, quelle qu’en soit la valeur. CloudFront envoie la réponse à l'utilisateur et met l'objet en cache dans l'emplacement périphérique.

Types de fichiers compressés par CloudFront

Pour obtenir la liste complète, consultez Types de fichiers compressés par CloudFront.

Taille des objets compressés par CloudFront

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

Content-LengthEn-tête

L'origine doit inclure dans la réponse un en-tête Content-Length dans la réponse, que CloudFront utilise pour déterminer si la taille de l'objet se trouve dans la plage que CloudFront compresse. Si l’en-tête Content-Length est manquant, contient une valeur non valide ou contient une valeur en dehors de la plage de tailles que CloudFront compresse, CloudFront ne compresse pas l’objet. Pour plus d’informations sur la façon dont CloudFront traite les objets volumineux pouvant dépasser cette plage de taille, consultez Comment CloudFront traite les demandes partielles pour un objet (plageGETs).

Code d'état HTTP de la réponse

CloudFront compresse les objets uniquement lorsque le code d'état HTTP de la réponse est 200, 403 ou 404.

La réponse n'a pas de corps

Lorsque la réponse HTTP de l'origine n'a pas de corps, CloudFront ne peut rien compresser.

ETagEn-tête

CloudFront modifie parfois l'en-tête ETag dans la réponse HTTP lorsqu'il compresse des objets. Pour plus d’informations, consultez ETagConversion de l'en-tête .

CloudFront ignore la compression

CloudFront compresse les objets dans la mesure du possible. Dans de rares cas, CloudFront omet de compresser un objet lorsque la charge de trafic est élevée. CloudFront prend cette décision en fonction de divers facteurs, notamment la capacité de l'hôte. Si CloudFront ignore la compression pour un objet, il met en cache l'objet non compressé et continue à le servir aux utilisateurs jusqu'à ce que l'objet expire, soit expulsé ou soit invalidé.

Types de fichiers compressés par CloudFront

Si vous configurez CloudFront pour compresser les objets, CloudFront compresse uniquement les objets ayant les valeurs suivantes dans l'en-tête de la réponse 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

ETagConversion de l'en-tête

Lorsque l'objet non compressé de l'origine inclut un en-tête HTTP ETag valide et fort et que CloudFront compresse cet objet, CloudFront convertit également la valeur d'en-tête ETag fort en un ETag faible, et renvoie la valeur ETag faible à l'utilisateur. Les utilisateurs peuvent stocker la valeur ETag faible et l'utiliser pour envoyer des demandes conditionnelles avec l'en-tête HTTP If-None-Match. Cela permet aux utilisateurs, à CloudFront et à l'origine de traiter les versions compressées et non compressées d'un objet comme sémantiquement équivalentes, ce qui réduit les transferts de données inutiles.

Une valeur d’en-tête ETag valide et forte commence et se termine par des guillemets doubles ("). Pour convertir la valeur ETag forte en valeur faible, CloudFront ajoute les caractères W/ au début de la valeur ETag forte.

Lorsque l'objet de l'origine inclut une valeur d'en-tête ETag faible (une valeur qui commence par les caractères W/), CloudFront ne modifie pas cette valeur et la renvoie à l'utilisateur telle qu'elle a été reçue de l'origine.

Lorsque l'objet de l'origine inclut une valeur d'en-tête ETag non valide (la valeur ne commence pas par " ou par W/), CloudFront supprime l'en-tête ETag et renvoie l'objet à l'utilisateur sans l'en-tête de réponse ETag.

Pour plus d’informations, consultez les pages suivantes dans les documents web MDN :