Gestion de la durée de conservation de contenu dans le cache (expiration) - 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.

Gestion de la durée de conservation de contenu dans le cache (expiration)

Vous pouvez contrôler pendant combien de temps des fichiers restent dans le cache CloudFront avant de réacheminer une autre demande vers votre origine. Réduire la durée vous permet de servir des contenus dynamiques. Augmenter la durée signifie que vos utilisateurs obtiennent de meilleures performances parce que vos fichiers sont plus susceptibles d'être servis directement à partir du cache périphérique. Une durée plus longue réduit également la charge sur votre origine.

Généralement, CloudFront diffuse un fichier à partir d'un emplacement périphérique jusqu'à ce que la durée de conservation en cache que vous avez spécifiée se soit écoulée, c'est-à-dire jusqu'à ce que le fichier expire. Après son expiration, la prochaine fois que l'emplacement périphérique recevra une demande pour le fichier, CloudFront transmettra la demande à l'origine pour vérifier que le cache contient la dernière version du fichier. La réponse de l'origine varie selon que le fichier a changé ou non :

  • Si le cache CloudFront contient déjà la dernière version, l'origine renvoie un code d'état 304 Not Modified.

  • Si le cache CloudFront ne contient pas la dernière version, l'origine renvoie un code d'état 200 OK et la dernière version du fichier.

Si un fichier à un emplacement périphérique n'est pas souvent demandé, CloudFront pourrait l'expulser, c'est-à-dire l'enlever avant sa date d'expiration, afin de libérer de la place pour des fichiers qui ont été demandés plus récemment.

Nous vous recommandons de gérer la durée de votre cache en mettant à jour la politique de cache de votre distribution. Si vous choisissez de ne pas utiliser de politique de cache, la durée de vie par défaut est de 24 heures, mais vous pouvez mettre à jour les paramètres suivants pour remplacer cette valeur par défaut :

Pour plus d’informations sur la manière dont la durée de vie minimale, la durée de vie par défaut et la durée de vie maximale interagissent avec les directives max-age et s-maxage, ainsi que le champ d’en-tête Expires, consultez Spécification du délai pendant lequel CloudFront garde les objets en cache.

Vous pouvez également contrôler pendant combien de temps des erreurs (par exemple, 404 Not Found) restent dans le cache CloudFront avant que ce dernier tente à nouveau d'obtenir l'objet demandé en transmettant une autre demande à votre origine. Pour plus d’informations, consultez Comment CloudFront traite les codes d'état HTTP 4xx et 5xx de votre origine.

Utilisation des en-têtes pour contrôler la durée de conservation en cache pour des objets individuels

Vous pouvez utiliser les en-têtes Cache-Control et Expires pour contrôler pendant combien de temps des objets restent dans le cache. Les valeurs de Durée de vie minimale, Durée de vie par défaut et Durée de vie maximale affectent également la durée de conservation en cache, mais voici un aperçu de l'incidence de ces en-têtes sur cette durée :

  • La directive Cache-Control max-age vous permet de spécifier combien de temps (en secondes) vous souhaitez qu'un objet reste dans le cache avant que CloudFront extraie à nouveau l'objet du serveur d'origine. La durée d'expiration minimale prise en charge par CloudFront est de 0 seconde. La valeur maximale est 100 ans. Spécifiez la valeur au format suivant :

    Cache-Control: max-age=secondes

    Par exemple, la directive suivante demande à CloudFront de conserver l'objet associé dans le cache pendant 3 600 secondes (une heure) :

    Cache-Control: max-age=3600

    Si vous souhaitez que des objets restent dans des caches périphériques CloudFront pendant une durée différente de celle définie dans les caches de navigateur, vous pouvez utiliser les directives Cache-Control max-age et Cache-Control s-maxage ensemble. Pour plus d’informations, consultez Spécification du délai pendant lequel CloudFront garde les objets en cache.

  • Le champ d'en-tête Expires vous permet de spécifier une date et une heure d'expiration au format spécifié dans RFC 2616, Hypertext Transfer Protocol -- HTTP/1.1 Section 3.3.1, Full Date, par exemple :

    Sat, 27 Jun 2015 23:59:59 GMT

Nous vous recommandons d'utiliser la directive Cache-Control max-age plutôt que le champ d'en-tête Expires pour contrôler la mise en cache des objets. Si vous spécifiez des valeurs pour Cache-Control max-age et pour Expires, CloudFront utilise uniquement la valeur de Cache-Control max-age.

Pour plus d’informations, consultez Spécification du délai pendant lequel CloudFront garde les objets en cache.

Vous ne pouvez pas utiliser les champs d'en-tête HTTP Cache-Control ou Pragma dans la demande GET d'un utilisateur pour forcer CloudFront à revenir au serveur d'origine pour l'objet. CloudFront ignore ces champs d'en-tête dans les demandes utilisateur.

Pour plus d'informations sur les champs d'en-tête Cache-Control et Expires, consultez les sections suivantes de RFC 2616, Hypertext Transfer Protocol -- HTTP/1.1:

Diffusion de contenu périmé (expiré)

CloudFront prend en charge les directives de contrôle du cache Stale-While-Revalidate et Stale-If-Error. Vous pouvez utiliser ces directives pour définir la durée pendant laquelle le contenu périmé reste accessible aux utilisateurs.

Stale-While-Revalidate

Cette directive permet à CloudFront de diffuser du contenu obsolète à partir du cache, tout en récupérant de manière asynchrone une nouvelle version depuis l’origine. Cela permet d’améliorer la latence, car les utilisateurs reçoivent immédiatement les réponses depuis les emplacements périphériques sans devoir attendre la récupération en arrière-plan. Le nouveau contenu est chargé en arrière-plan pour les prochaines demandes.

Exemple : Stale-While-Revalidate

CloudFront effectue les actions suivantes lorsque vous configurez l’en-tête Cache-Control pour utiliser ces directives.

Cache-Control: max-age=3600, stale-while-revalidate=600
  1. CloudFront mettra en cache une réponse pendant une heure (max-age=3600).

  2. Si une demande est effectuée après cette durée, CloudFront diffuse le contenu obsolète tout en envoyant simultanément une demande à l’origine pour revalider et actualiser le contenu mis en cache.

  3. Pendant la phase de revalidation du contenu, CloudFront continue de diffuser le contenu périmé pendant un maximum de 10 minutes (stale-while-revalidate=600).

Note

CloudFront diffusera le contenu périmé jusqu’à la valeur définie par la directive stale-while-revalidate, ou jusqu’à la valeur de la Durée de vie maximale de CloudFront, selon la valeur la plus faible. Une fois la durée de vie maximale écoulée, l’objet périmé n’est plus disponible dans le cache périphérique, quelle que soit sa valeur stale-while-revalidate.

Stale-If-Error

Cette directive permet à CloudFront de diffuser du contenu obsolète à partir du cache si l’origine est inaccessible ou renvoie un code d’erreur compris entre 500 et 600. Cela garantit que les utilisateurs peuvent accéder au contenu même en cas de panne de l'origine.

Exemple : Stale-If-Error

CloudFront effectue les actions suivantes lorsque vous configurez l’en-tête Cache-Control pour utiliser ces directives.

Cache-Control: max-age=3600, stale-if-error=86400
  1. CloudFront met la réponse en cache pendant une heure (max-age=3600).

  2. Si l’origine est en panne ou renvoie une erreur après cette durée, CloudFront continue de diffuser le contenu obsolète pendant 24 heures au maximum (stale-if-error=86400)

  3. Si vous avez configuré des réponses d’erreur personnalisées, CloudFront tentera de servir le contenu périmé si une erreur survient dans la durée spécifiée par stale-if-error. Si le contenu périmé n’est pas disponible, CloudFront diffusera alors les pages d’erreur personnalisées que vous avez configurées pour le code d’erreur correspondant. Pour plus d’informations, consultez Génération de réponses d’erreur personnalisées.

Remarques
  • CloudFront diffusera le contenu périmé jusqu’à la valeur définie par la directive stale-if-error, ou jusqu’à la valeur de la Durée de vie maximale de CloudFront, selon la valeur la plus faible. Une fois la durée de vie maximale écoulée, l’objet périmé n’est plus disponible dans le cache périphérique, quelle que soit sa valeur stale-if-error.

  • Si vous ne configurez pas stale-if-error ou de réponses d’erreur personnalisées, CloudFront renverra l’objet périmé ou transmettra la réponse d’erreur à l’utilisateur, selon que l’objet demandé se trouve ou non dans le cache périphérique. Pour plus d’informations, consultez Comment CloudFront traite les erreurs si vous n'avez pas configuré de pages d'erreur personnalisées.

Utilisation des deux directives

stale-while-revalidate et stale-if-error sont des directives de contrôle du cache indépendantes que vous pouvez utiliser ensemble pour réduire la latence et ajouter une mémoire tampon permettant à votre origine de répondre ou de récupérer.

Exemple : utilisation des deux directives

CloudFront procède comme suit lorsque vous définissez l’en-tête Cache-Control pour utiliser les directives suivantes.

Cache-Control: max-age=3600, stale-while-revalidate=600, stale-if-error=86400
  1. CloudFront met la réponse en cache pendant une heure (max-age=3600).

  2. Si une demande est effectuée après cette durée, CloudFront diffuse le contenu obsolète pendant 10 minutes au maximum (stale-while-revalidate=600) pendant la revalidation du contenu.

  3. Si le serveur d’origine renvoie une erreur alors que CloudFront tente de revalider le contenu, CloudFront continuera de diffuser le contenu obsolète pendant 24 heures au maximum (stale-if-error=86400).

La mise en cache est un équilibre entre performance et actualisation. L'utilisation de directives telles que stale-while-revalidate et stale-if-error peut améliorer les performances et l'expérience utilisateur, mais vérifiez que les configurations correspondent à l'actualisation souhaitée pour votre contenu. Les directives de contenu obsolètes conviennent mieux aux cas d'utilisation où le contenu doit être actualisé, mais où il n'est pas essentiel de disposer de la dernière version. De plus, si votre contenu ne change pas ou change rarement, stale-while-revalidate peut ajouter des demandes réseau inutiles. Envisagez plutôt de définir une durée de cache longue.

Spécification du délai pendant lequel CloudFront garde les objets en cache

Pour contrôler la durée pendant laquelle CloudFront conserve un objet dans le cache avant d'envoyer une autre demande à l'origine, vous pouvez :

  • définir les valeurs de durée de vie minimale, maximale et par défaut dans le comportement de cache d'une distribution CloudFront. Vous pouvez définir ces valeurs dans une politique de cache associée au comportement de cache (recommandé) ou dans les paramètres de cache hérités.

  • inclure l'en-tête Cache-Control ou Expires dans les réponses de l'origine. Ces en-têtes permettent également de déterminer combien de temps un navigateur conserve un objet dans le cache de navigateur avant d'envoyer une autre demande à CloudFront.

Le tableau suivant explique comment les en-têtes Cache-Control et Expires envoyés à partir de l'origine fonctionnent avec les paramètres TTL dans un comportement de cache pour affecter la mise en cache.

En-têtes d'origine Durée de vie minimale = 0 Durée de vie minimale > 0

L'origine ajoute une directive Cache-Control: max-age à l'objet

Mise en cache CloudFront

CloudFront met l'objet en cache selon la valeur la plus faible entre la directive Cache-Control: max-age et la valeur de la TTL maximale CloudFront.

Conservation en cache par les navigateurs

Les navigateurs mettent l'objet en cache selon la valeur de la directive Cache-Control: max-age.

Mise en cache CloudFront

La mise en cache CloudFront dépend des valeurs TTL minimale et TTL maximale CloudFront, et de la directive Cache-Control max-age :

  • Si la TTL minimale < max-age < TTL maximale, CloudFront met l'objet en cache selon la valeur de la directive Cache-Control: max-age.

  • Si max-age < TTL minimale, CloudFront met l'objet en cache selon la valeur de la TTL minimale CloudFront.

  • Si max-age > TTL maximale, CloudFront met l'objet en cache selon la valeur de la TTL maximale CloudFront.

Conservation en cache par les navigateurs

Les navigateurs mettent l'objet en cache selon la valeur de la directive Cache-Control: max-age.

L'origine n'ajoute pas de directive Cache-Control: max-age à l'objet

Mise en cache CloudFront

CloudFront met l'objet en cache selon la valeur de la TTL par défaut CloudFront.

Conservation en cache par les navigateurs

Dépend du navigateur.

Mise en cache CloudFront

CloudFront met l'objet en cache selon la valeur la plus élevée entre la valeur de la TTL minimale et la valeur de la TTL par défaut CloudFront.

Conservation en cache par les navigateurs

Dépend du navigateur.

L'origine ajoute les directives Cache-Control: max-age et Cache-Control: s-maxage à l'objet

Mise en cache CloudFront

CloudFront met l'objet en cache selon la valeur la plus faible entre la directive Cache-Control: s-maxage et la valeur de la TTL maximale CloudFront.

Conservation en cache par les navigateurs

Les navigateurs mettent l'objet en cache selon la valeur de la directive Cache-Control max-age.

Mise en cache CloudFront

La mise en cache CloudFront dépend des valeurs TTL minimale et TTL maximale CloudFront, et de la directive Cache-Control: s-maxage :

  • Si la TTL minimale < s-maxage < TTL maximale, CloudFront met l'objet en cache selon la valeur de la directive Cache-Control: s-maxage.

  • Si s-maxage < TTL minimale, CloudFront met l'objet en cache selon la valeur de la TTL minimale CloudFront.

  • Si s-maxage > TTL maximale, CloudFront met l'objet en cache selon la valeur de la TTL maximale CloudFront.

Conservation en cache par les navigateurs

Les navigateurs mettent l'objet en cache selon la valeur de la directive Cache-Control: max-age.

L'origine ajoute un en-tête Expiresà l'objet

Mise en cache CloudFront

CloudFront met l'objet en cache jusqu'à la date indiquée dans l'en-tête Expires ou selon la valeur de la TTL maximale CloudFront, au premier terme échu.

Conservation en cache par les navigateurs

Les navigateurs mettent l'objet en cache jusqu'à la date indiquée dans l'en-tête Expires.

Mise en cache CloudFront

La conservation en cache par CloudFront dépend des valeurs de durée de vie (TTL) minimale et maximale CloudFront, et de l'en-tête Expires :

  • Si la TTL minimale < Expires < TTL maximale, CloudFront met l'objet en cache jusqu'à la date et l'heure indiquées dans l'en-tête Expires.

  • Si Expires < TTL minimale, CloudFront met l'objet en cache selon la valeur de la TTL minimale CloudFront.

  • Si Expires > TTL maximale, CloudFront met l'objet en cache selon la valeur de la TTL maximale CloudFront.

Conservation en cache par les navigateurs

Les navigateurs mettent l'objet en cache jusqu'à la date et l'heure indiquées dans l'en-tête Expires.

L'origine ajoute les directives Cache-Control: no-cache, no-store et/ou private à l'objet

CloudFront et les navigateurs respectent les en-têtes.

Mise en cache CloudFront

CloudFront met l'objet en cache selon la valeur de la TTL minimale CloudFront. Voir l'avertissement en dessous de ce tableau.

Conservation en cache par les navigateurs

Les navigateurs respectent les en-têtes.

Avertissement
  • Si votre durée de vie minimale est supérieure à 0, CloudFront utilise la durée de vie minimale définie dans la politique de cache, même si les directives Cache-Control: no-cache, no-store et/ou private sont présentes dans les en-têtes d’origine.

    • Si l'origine est accessible, CloudFront obtient l'objet de l'origine et le renvoie à l'utilisateur.

    • Si l’origine n’est pas accessible et que la valeur de la durée de vie minimale ou maximale est supérieure à 0, CloudFront servira l’objet précédemment récupéré depuis l’origine.

    Pour éviter ce comportement, incluez la directive Cache-Control: stale-if-error=0 avec l'objet renvoyé de l'origine. Cela amène CloudFront à renvoyer une erreur en réponse aux demandes ultérieures si l'origine n'est pas accessible, plutôt que de renvoyer l'objet qu'il a obtenu de l'origine précédemment.

  • CloudFront ne met pas en cache le code d’état HTTP 501 (non implémenté) provenant d’une origine S3 lorsque les en-têtes de l’origine incluent les directives Cache-Control: no-cache, no-store et/ou private. Il s’agit du comportement par défaut pour une origine S3, même si votre paramètre Durée de vie minimale est supérieur à 0.

Pour plus d'informations sur la modification des paramètres des distributions à l'aide de la console CloudFront, consultez Mettre à jour une distribution. Pour plus d'informations sur la modification des paramètres des distributions à l'aide de l'API CloudFront, consultez UpdateDistribution.

Ajout d’en-têtes à vos objets à l’aide de la console Amazon S3

Vous pouvez ajouter le champ d’en-tête Cache-Control ou Expires à vos objets Amazon S3. Pour ce faire, vous devez modifier les champs de métadonnées de l’objet.

Vous pouvez ajouter un champ d’en-tête Cache-Control ou Expires à vos objets Amazon S3
  1. Suivez la procédure décrite dans la section Remplacement de métadonnées définies par le système de la rubrique Modification des métadonnées d’objet dans la console Amazon S3 du Guide de l’utilisateur Amazon S3.

  2. Dans Key (Clé), choisissez le nom de l'en-tête que vous ajoutez (Cache-Control ou Expires).

  3. Dans Value (Valeur), entrez une valeur d'en-tête. Par exemple, pour une en-tête Cache-Control, vous pouvez entrer max-age=86400. Pour Expires, vous pouvez entrer une date et une heure d'expiration comme Wed, 30 Jun 2021 09:28:00 GMT.

  4. Suivez le reste de la procédure pour enregistrer les modifications apportées aux métadonnées.