Service 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.

Service de fichiers compressés

Vous pouvez l'utiliser CloudFront pour compresser automatiquement certains types d'objets (fichiers) et distribuer les objets compressés lorsque les utilisateurs (navigateurs Web ou autres clients) les prennent en charge. Les utilisateurs indiquent leur prise en charge des objets compressés avec l'en-tête Accept-Encoding HTTP.

CloudFront peut compresser des objets en utilisant les formats de compression Gzip et Brotli. Lorsque le lecteur prend en charge les deux formats et que les deux sont présents sur le serveur de cache atteint, il CloudFront préfère Brotli. Si un seul format de compression est présent dans le serveur de cache, il le CloudFront renvoie.

Note

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

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). En particulier pour JavaScript les fichiers CSS, des téléchargements plus rapides peuvent accélérer le rendu des pages Web pour vos utilisateurs. En outre, étant donné que le coût du transfert de CloudFront données est basé sur la quantité totale de données diffusées, le service d'objets compressés peut être moins coûteux que de les servir non compressés.

Certaines origines personnalisées peuvent également compresser des objets. Votre origine est peut-être en mesure de compresser des objets qui CloudFront ne le sont pas (voirTypes de fichier que CloudFront compresse). Si votre origine renvoie un objet compressé à CloudFront, CloudFront détecte que l'objet est compressé en fonction de la présence d'un Content-Encoding en-tête et ne le compresse pas à nouveau.

Configuration CloudFront pour compresser des objets

CloudFront Pour configurer la compression des objets, mettez à jour le comportement du cache que vous souhaitez appliquer aux objets compressés en procédant comme suit :

  1. Assurez-vous que le paramètre Compress objects automatically (Compresser automatiquement les objets) est défini sur Yes (Oui). (Dans AWS CloudFormation ou dans l' CloudFront API, défini Compress surtrue.)

  2. Utilisez une stratégie de cache pour spécifier les paramètres de mise en cache et assurez-vous que les paramètres Gzip et Brotli sont tous les deux activés. (Dans AWS CloudFormation ou dans l'API CloudFront, définissez EnableAcceptEncodingGzip et EnableAcceptEncodingBrotli sur true.)

  3. Assurez-vous que les valeurs TTL dans la stratégie de cache sont définies sur une valeur supérieure à zéro. Lorsque vous définissez les valeurs TTL sur zéro, la mise en cache est désactivée et CloudFront ne compresse pas les objets.

Pour mettre à jour un comportement de cache, vous pouvez utiliser l'un des outils suivants :

Comment fonctionne CloudFront la compression

Lorsque vous configurez CloudFront pour compresser des objets (voir la section précédente), voici comment cela fonctionne :

  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. Lorsque le lecteur supporte à la fois Gzip et Brotli, CloudFront il préfère Brotli.

    Note

    Les navigateurs web Chrome et Firefox prennent en charge la compression Brotli uniquement lorsque la demande est envoyée en HTTPS. Ces navigateurs 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. Si l'objet compressé se trouve déjà dans le cache, il l' CloudFront envoie au visualiseur et ignore les étapes restantes.

    Si l'objet compressé n'est pas dans le cache, CloudFront transmet la demande à l'origine.

    Note

    Si une copie non compressée de l'objet se trouve déjà dans le cache, vous CloudFront pouvez l'envoyer au visualiseur sans transmettre la demande à l'origine. Par exemple, cela peut se produire lorsque la compression a CloudFront été précédemment ignorée. Dans ce cas, met en CloudFront 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 renvoie un objet compressé, comme indiqué par la présence d'un Content-Encoding en-tête dans la réponse HTTP, CloudFront envoie l'objet compressé au visualiseur, l'ajoute au cache et ignore l'étape restante. CloudFront ne compresse pas à nouveau l'objet.

    Si l'origine renvoie un objet non compressé à CloudFront (il n'y a aucun Content-Encoding en-tête dans la réponse HTTP), CloudFront détermine si l'objet est compressible. Pour plus d'informations sur la manière de CloudFront déterminer si un objet est compressible, consultez la section suivante.

  5. Si l'objet est compressible, CloudFront compressez-le, envoyez-le au visualiseur et ajoutez-le au cache. (Dans de rares cas, CloudFront cela peut ignorer la compression et envoyer l'objet décompressé au visualiseur.)

Remarques sur CloudFront la compression

La liste suivante fournit plus d'informations sur les circonstances dans lesquelles CloudFront des objets sont compressés.

La demande utilise HTTP 1.0

Si une demande CloudFront utilise le protocole HTTP 1.0, CloudFront supprime l'Accept-Encodingen-tête et ne compresse pas l'objet dans la réponse.

En-tête de demande Accept-Encoding

Si l'Accept-Encodingen-tête est absent de la demande du visualiseur, ou s'il ne contient pas gzip ou br ne contient pas de valeur, l'objet CloudFront n'est pas compressé dans la réponse. Si l'Accept-Encodingen-tête inclut des valeurs supplémentaires telles quedeflate, les CloudFront supprime avant de transmettre la demande à l'origine.

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

Contenu dynamique

CloudFront ne compresse pas toujours le contenu dynamique. Les réponses pour le contenu dynamique sont parfois compressées, et parfois elles ne le sont pas.

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

CloudFront compresse les objets lorsqu'il les extrait de l'origine. Lorsque vous configurez CloudFront pour compresser des objets, CloudFront cela ne compresse pas les objets déjà mis en cache dans des emplacements périphériques. En outre, lorsqu'un objet mis en cache expire dans un emplacement périphérique et CloudFront transmet une autre demande pour l'objet à votre origine, CloudFront cela ne compresse pas l'objet lorsque votre origine renvoie un code d'état HTTP 304, ce qui signifie que l'emplacement périphérique possède déjà la dernière version de l'objet. Si vous souhaitez CloudFront compresser des objets déjà mis en cache dans des emplacements périphériques, vous devez invalider ces objets. Pour de plus amples informations, veuillez consulter Invalidation de fichiers.

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

Si vous configurez CloudFront pour compresser des objets et que l'origine compresse également des objets, l'origine doit inclure un Content-Encoding en-tête indiquant CloudFront que l'objet est déjà compressé. Lorsqu'une réponse provenant d'une origine inclut l'Content-Encodingen-tête, CloudFront elle ne compresse pas l'objet, quelle que soit la valeur de l'en-tête. CloudFront envoie la réponse au spectateur et met en cache l'objet à l'emplacement périphérique.

Types de fichiers qui CloudFront compressent

Pour obtenir la liste complète des types de fichiers CloudFront compressés, consultezTypes de fichier que CloudFront compresse.

Taille des objets qui CloudFront compressent

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

En-tête Content-Length

L'origine doit inclure un Content-Length en-tête dans la réponse, qui CloudFront permet de déterminer si la taille de l'objet se situe dans la plage de CloudFront compression. Si l'Content-Lengthen-tête est absent, contient une valeur non valide ou contient une valeur en dehors de la plage de tailles qui CloudFront compresse, CloudFront ne compresse pas l'objet.

Code d'état HTTP de la réponse

CloudFront compresse les objets uniquement lorsque le code d'état HTTP de la réponse est 200403, ou404.

La réponse n'a pas de corps

Lorsque la réponse HTTP de l'origine n'a pas de corps, il n'y a rien CloudFront à compresser.

En-tête ETag

CloudFront modifie parfois l'ETagen-tête de la réponse HTTP lorsqu'elle compresse des objets. Pour de plus amples informations, veuillez consulter Conversion de l'en-tête ETag.

CloudFront ignore la compression

CloudFront compresse les objets au mieux. Dans de rares cas, CloudFront ignore la compression. CloudFront prend cette décision en fonction de divers facteurs, y compris la capacité de l'hôte. Si la compression CloudFront d'un objet est ignorée, il met en cache l'objet non compressé et continue de le servir aux utilisateurs jusqu'à ce que l'objet expire, soit expulsé ou soit invalidé.

Types de fichier que CloudFront compresse

Si vous configurez CloudFront pour compresser des objets, compresse CloudFront uniquement les objets dont l'en-tête de Content-Type réponse contient l'une des valeurs suivantes :

  • 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

Conversion de l'en-tête ETag

Lorsque l'objet décompressé depuis l'origine inclut un en-tête ETag HTTP valide et fort, et qu'il CloudFront compresse l'objet, convertit CloudFront également la valeur d'ETagen-tête forte en valeur faible ETag et renvoie la ETag valeur faible au visualiseur. 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 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. CloudFront

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

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

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

Pour de plus amples informations, veuillez consulter les pages suivantes dans les documents web MDN :