Gérer la durée pendant laquelle le contenu reste 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.

Gérer la durée pendant laquelle le contenu reste dans le cache (expiration)

Vous pouvez contrôler la durée pendant laquelle vos fichiers restent dans le CloudFront cache avant de CloudFront transmettre une autre demande à votre source. 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 cache que vous avez spécifiée soit atteinte, c'est-à-dire jusqu'à ce que le fichier expire. Après son expiration, la prochaine fois que l'emplacement périphérique reçoit une demande pour le fichier, CloudFront transmet 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 CloudFront cache possède déjà la dernière version, l'origine renvoie un code d'état304 Not Modified.

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

Si un fichier situé dans un emplacement périphérique n'est pas fréquemment demandé, CloudFront vous pouvez l'expulser (supprimer le fichier avant sa date d'expiration) pour faire de la place aux fichiers demandés plus récemment.

Par défaut, chaque fichier expire automatiquement au bout de 24 heures, mais vous pouvez modifier le comportement par défaut de deux manières :

Pour plus d'informations sur la façon dont les TTL paramètres MinimumTTL, Default et Maximum TTL interagissent avec les s-maxage directives max-age and et le champ Expires d'en-tête, consultezSpécifiez la durée de mise en CloudFront cache des objets.

Vous pouvez également contrôler la durée pendant laquelle les erreurs (par exemple404 Not Found) restent dans un CloudFront cache avant de CloudFront réessayer d'obtenir l'objet demandé en transférant une autre demande à votre origine. Pour de plus amples informations, veuillez consulter Comment CloudFront traite les codes de statut HTTP 4xx et 5xx de votre origine.

Utiliser des en-têtes pour contrôler la durée du 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 paramètres Minimum TTLTTL, Default et Maximum affectent TTL également la durée du cache, mais voici un aperçu de la façon dont les en-têtes peuvent affecter la durée du cache :

  • La Cache-Control max-age directive vous permet de spécifier la durée (en secondes) pendant laquelle vous souhaitez qu'un objet reste dans le cache CloudFront avant de le récupérer depuis le serveur d'origine. Le délai d'expiration minimum pris CloudFront en charge est de 0 seconde. La valeur maximale est 100 ans. Spécifiez la valeur au format suivant :

    Cache-Control: max-age=seconds

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

    Cache-Control: max-age=3600

    Si vous souhaitez que les objets restent dans les caches CloudFront périphériques pendant une durée différente de celle dans les caches du navigateur, vous pouvez utiliser les Cache-Control s-maxage directives Cache-Control max-age et conjointement. Pour de plus amples informations, veuillez consulter Spécifiez la durée de mise en CloudFront cache des objets.

  • Le champ d'Expiresen-tête vous permet de spécifier une date et une heure d'expiration en utilisant le format spécifié dans RFC2616, Hypertext Transfer Protocol -- HTTP /1.1 Section 3.3.1, Date complète, 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 à la fois pour Cache-Control max-age et pourExpires, CloudFront utilise uniquement la valeur deCache-Control max-age.

Pour de plus amples informations, veuillez consulter Spécifiez la durée de mise en CloudFront cache des objets.

Vous ne pouvez pas utiliser les champs d'Pragmaen-tête HTTP Cache-Control ou dans une GET demande d'un visualiseur CloudFront pour forcer le retour de l'objet sur le serveur d'origine. CloudFront ignore ces champs d'en-tête dans les demandes des utilisateurs.

Pour plus d'informations sur les champs d'Expiresen-tête Cache-Control et les champs d'en-tête, consultez les sections suivantes du document RFC2616, Hypertext Transfer Protocol -- /1.1 : HTTP

Servir du contenu périmé (expiré)

CloudFront prend en charge Stale-While-Revalidate les directives de contrôle du Stale-If-Error cache et.

  • La stale-while-revalidate directive permet CloudFront de diffuser du contenu périmé depuis le cache tout en récupérant de manière asynchrone une nouvelle version depuis l'origine. Cela améliore la latence, car les utilisateurs reçoivent des réponses immédiatement depuis CloudFront les emplacements périphériques sans avoir à attendre la récupération en arrière-plan, et le nouveau contenu est chargé en arrière-plan pour les demandes futures.

    Dans l'exemple suivant, met en CloudFront cache la réponse pendant une heure (max-age=3600). Si une demande est faite après cette période, CloudFront diffuse le contenu périmé tout en envoyant simultanément une demande à l'origine pour revalider et actualiser le contenu mis en cache. Le contenu obsolète est diffusé pendant 10 minutes au maximum (stale-while-revalidate=600) pendant la revalidation du contenu.

    Cache-Control: max-age=3600, stale-while-revalidate=600
    Note

    CloudFront diffusera le contenu périmé jusqu'à la valeur de la stale-while-revalidate directive ou jusqu'à la valeur CloudFront maximaleTTL, la valeur la plus faible étant retenue.

  • La stale-if-error directive permet CloudFront de diffuser du contenu périmé à 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.

    Dans l'exemple suivant, met en CloudFront cache la réponse pendant une heure (max-age=3600). Si l'origine est en panne ou renvoie une erreur après cette période, le contenu périmé CloudFront continue à être diffusé pendant 24 heures au maximum (stale-if-error=86400).

    Cache-Control: max-age=3600, stale-if-error=86400
    Note

    CloudFront diffusera le contenu périmé jusqu'à la valeur de la stale-if-error directive ou jusqu'à la valeur CloudFront maximaleTTL, la valeur la plus faible étant retenue.

    Lorsque des réponses d'erreur personnalisées stale-if-error et à la fois sont configurées, essayez d' CloudFront abord de diffuser le contenu périmé si une erreur est détectée dans le délai spécifiéstale-if-error. Si le contenu périmé n'est pas disponible ou si la stale-if-error durée du contenu est dépassée, CloudFront les réponses d'erreur personnalisées configurées pour le code d'état d'erreur correspondant sont envoyées.

Utilisez les deux ensemble

stale-while-revalidate et stale-if-error sont des directives de contrôle du cache indépendantes qui peuvent être utilisées ensemble pour réduire la latence et ajouter une mémoire tampon permettant à votre origine de répondre ou de récupérer.

Dans l'exemple suivant, met en CloudFront cache la réponse pendant une heure (max-age=3600). Si une demande est faite après cette période, CloudFront diffuse le contenu périmé pendant 10 minutes maximum (stale-while-revalidate=600) pendant la revalidation du contenu. Si le serveur d'origine renvoie une erreur alors qu'il CloudFront tente de revalider le contenu, il CloudFront continue à diffuser le contenu périmé pendant 24 heures au maximum ()stale-if-error=86400.

Cache-Control: max-age=3600, stale-while-revalidate=600, stale-if-error=86400
Astuce

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écifiez la durée de mise en CloudFront cache des objets

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

  • Définissez les TTL valeurs minimale, maximale et par défaut dans le comportement du cache d'une CloudFront distribution. 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 la durée pendant laquelle un navigateur conserve un objet dans le cache du navigateur avant d'envoyer une autre demande à CloudFront.

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

En-têtes d'origine Minimum TTL = 0 Minimum TTL > 0

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

CloudFront mise en cache

CloudFront met en cache l'objet pour la valeur la plus faible entre la valeur de la Cache-Control: max-age directive ou la valeur CloudFront maximaleTTL.

Conservation en cache par les navigateurs

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

CloudFront mise en cache

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

  • Si minimum TTL < max-age < maximumTTL, l'objet est mis en CloudFront cache pour la valeur de la Cache-Control: max-age directive.

  • Si max-age < minimumTTL, met en CloudFront cache l'objet pour la valeur du CloudFront minimumTTL.

  • Si max-age > maximumTTL, met en CloudFront cache l'objet pour la valeur CloudFront maximaleTTL.

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

CloudFront mise en cache

CloudFront met en cache l'objet pour la valeur CloudFront par défautTTL.

Conservation en cache par les navigateurs

Dépend du navigateur.

CloudFront mise en cache

CloudFront met en cache l'objet pour la valeur la plus élevée entre la valeur CloudFront minimale TTL ou la valeur par défautTTL.

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

CloudFront mise en cache

CloudFront met en cache l'objet pour la valeur la plus faible entre la valeur de la Cache-Control: s-maxage directive ou la valeur CloudFront maximaleTTL.

Conservation en cache par les navigateurs

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

CloudFront mise en cache

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

  • Si minimum TTL < s-maxage < maximumTTL, l'objet est mis en CloudFront cache pour la valeur de la Cache-Control: s-maxage directive.

  • Si s-maxage < minimumTTL, met en CloudFront cache l'objet pour la valeur du CloudFront minimumTTL.

  • Si s-maxage > maximumTTL, met en CloudFront cache l'objet pour la valeur CloudFront maximaleTTL.

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

CloudFront mise en cache

CloudFront met en cache l'objet jusqu'à la date indiquée dans l'Expiresen-tête ou jusqu'à la valeur CloudFront maximaleTTL, selon la première de ces deux dates.

Conservation en cache par les navigateurs

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

CloudFront mise en cache

CloudFront la mise en cache dépend des valeurs CloudFront minimale TTL et maximale TTL et de l'Expiresen-tête :

  • Si minimum TTL < Expires < maximumTTL, l'objet est mis en CloudFront cache jusqu'à la date et à l'heure indiquées dans l'Expiresen-tête.

  • Si Expires < minimumTTL, met en CloudFront cache l'objet pour la valeur du CloudFront minimumTTL.

  • Si Expires > maximumTTL, met en CloudFront cache l'objet pour la valeur CloudFront maximaleTTL.

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.

CloudFront mise en cache

CloudFront met en cache l'objet pour la valeur CloudFront minimaleTTL. Voir l'avertissement en dessous de ce tableau.

Conservation en cache par les navigateurs

Les navigateurs respectent les en-têtes.

Avertissement

Si votre minimum TTL est supérieur à 0, CloudFront utilise le minimum de la politique de cacheTTL, même si les private directives Cache-Control: no-cacheno-store, et/ou sont présentes dans les en-têtes d'origine.

Si l'origine est accessible, CloudFront récupère l'objet depuis l'origine et le renvoie au visualiseur.

Si l'origine est inaccessible et que la TTL valeur minimale ou maximale est supérieure à 0, CloudFront servira l'objet obtenu précédemment par l'origine.

Pour éviter ce comportement, incluez la directive Cache-Control: stale-if-error=0 avec l'objet renvoyé de l'origine. Cela CloudFront entraîne le renvoi d'une erreur en réponse aux futures demandes si l'origine est inaccessible, plutôt que de renvoyer l'objet obtenu précédemment.

Pour plus d'informations sur la façon de modifier les paramètres des distributions à l'aide de la CloudFront console, consultezMettre à jour une distribution. Pour plus d'informations sur la façon de modifier les paramètres des distributions à l'aide du CloudFront API, consultez UpdateDistribution.

Ajoutez des en-têtes à vos objets à l'aide de la console Amazon S3

Pour ajouter un champ d'en-tête Cache-Control ou Expires aux objets Amazon S3 à l'aide de la console Amazon S3
  1. Connectez-vous à la console Amazon S3 AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/s3/.

  2. Dans la liste des compartiments, sélectionnez le nom du compartiment contenant les fichiers auxquels vous ajoutez des en-têtes.

  3. Sélectionnez la case à cocher située à côté du nom du fichier ou du dossier auquel vous ajoutez des en-têtes. L'ajout d'en-têtes sur un dossier impacte tous les fichiers contenus dans ce dossier.

  4. Sélectionnez Actions, puis Edit metadata (Modifier les métadonnées).

  5. Dans le panneau Add metadata (Ajouter des métadonnées), procédez comme suit :

    1. Sélectionnez Add metadata (Ajouter des métadonnées).

    2. DansType, choisissez System defined (Défini par le système).

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

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

  6. Au bas de la page, sélectionnez Edit metadata (Modifier les métadonnées).