Servir des 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.

Servir des 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 spectateurs indiquent leur support pour les objets compressés avec l'Accept-EncodingHTTPen-tête.

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.

S'il y a des demandes ultérieures du spectateur pour le même objet, CloudFront renvoie la première version mise en cache. Par exemple, si un visualiseur demande un objet spécifique utilisant la compression Gzip et que l'objet est mis en cache, et que le visualiseur accepte le format Gzip, les demandes suivantes adressées au même objet renverront toujours la version Gzip, même si le visualiseur accepte à la fois Brotli et Gzip.

Note

Les navigateurs Web Chrome et Firefox prennent en charge la compression Brotli uniquement lorsque la demande est envoyée via. HTTPS Ces navigateurs ne prennent pas en charge les requêtes Brotli. 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 CSS les fichiers JavaScript et, 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.

Configurer 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 CloudFront API, réglé 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 le CloudFrontAPI, set EnableAcceptEncodingGzip et EnableAcceptEncodingBrotli totrue.)

  3. Assurez-vous que les TTL valeurs de la politique de cache sont définies sur une valeur supérieure à zéro. Lorsque vous définissez les TTL valeurs sur zéro, la mise en cache du contenu compressé est désactivée.

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. Le visualiseur inclut l'Accept-EncodingHTTPen-tête dans la demande, et la valeur d'en-tête inclut gzipbr, 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 via. HTTPS Ces navigateurs ne prennent pas en charge les requêtes Brotli. 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 HTTP réponse, 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 pas Content-Encoding d'en-tête dans la HTTP réponse), 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.)

Quand CloudFront compresse des objets

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 la HTTP version 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'HTTPétat 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 Invalider des fichiers pour supprimer du contenu.

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. CloudFrontenvoie 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 CloudFront compressés

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.

HTTPcode d'état de la réponse

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

La réponse n'a pas de corps

Lorsque la HTTP réponse 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 HTTP réponse lorsqu'il 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 ETag HTTP en-tête 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 ETag valeur faible et l'utiliser pour envoyer des demandes conditionnelles avec l'If-None-MatchHTTPen-tête. 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 plus d'informations, consultez les pages suivantes de la documentation MDN Web :