Mise en cache de contenu basée sur des en-têtes de demandes - 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.

Mise en cache de contenu basée sur des en-têtes de demandes

CloudFront vous permet de préciser si vous souhaitez transmettre les en-têtes à votre origine et mettre en cache des versions distinctes d'un objet spécifié en fonction des valeurs d'en-tête dans les demandes utilisateur. Cela vous permet de servir des versions différentes de votre contenu selon l'appareil employé par l'utilisateur, l'emplacement de l'utilisateur, la langue utilisée par l'utilisateur et différents autres critères.

En-têtes et distributions web : présentation

Par défaut, CloudFront ne prend pas en compte les en-têtes lors de la mise en cache de vos objets dans les emplacements périphériques. Si votre origine renvoie deux objets et que ceux-ci diffèrent uniquement par les valeurs des en-têtes de la demande, CloudFront met en cache une seule version de l'objet.

Vous pouvez configurer CloudFront pour transmettre des en-têtes à l'origine, ce qui entraîne la mise en cache par CloudFront de plusieurs versions d'un objet selon les valeurs d'un ou de plusieurs en-têtes de demande. Pour configurer CloudFront pour la mise en cache d'objets en fonction des valeurs d'en-têtes spécifiques, vous spécifiez les paramètres de comportement du cache pour votre distribution. Pour plus d'informations, consultez Mise en cache basée sur des en-têtes de requête sélectionnés.

Par exemple, supposons que des demandes d'utilisateur pour logo.jpg contiennent un en-tête Product personnalisé ayant la valeur Acme ou Apex. Lorsque vous configurez CloudFront pour mettre en cache vos objets en fonction de la valeur de l'en-tête Product, CloudFront transmet les demandes pour logo.jpg à l'origine et inclut l'en-tête Product et les valeurs de l'en-tête. CloudFront met en cache logo.jpg une fois pour les demandes dans lesquelles la valeur de l'en-tête Product est Acme et une fois pour les demandes dans lesquelles la valeur est Apex.

Vous pouvez configurer chaque comportement de cache d'une distribution pour exécuter l'une des opérations suivantes :

  • Transmettre tous les en-têtes à votre origine

    Note

    Pour les paramètres de cache hérités : si vous configurez CloudFront pour transférer tous les en-têtes à votre origine, CloudFront ne met pas en cache les objets associés à ce comportement de cache. Par contre, il envoie chaque demande à l'origine.

  • Transférez une liste d'en-têtes que vous spécifiez. CloudFront met en cache vos objets selon les valeurs de tous les en-têtes spécifiés. CloudFront transmet également les en-têtes transmis par défaut, mais il met en cache vos objets uniquement en fonction des en-têtes que vous spécifiez.

  • Transmettre uniquement les en-têtes par défaut. Dans cette configuration, CloudFront ne met pas en cache vos objets selon les valeurs des en-têtes de demande.

Pour obtenir le quota actuel relatif au nombre d'en-têtes que vous pouvez transférer pour chaque comportement de cache ou pour demander un quota supérieur, consultez la section Quotas sur les en-têtes.

Pour plus d'informations sur l'utilisation de la console CloudFront pour mettre à jour une distribution afin de transmette des en-têtes à l'origine, consultez Mettre à jour une distribution. Pour plus d’informations sur l’utilisation de l’API CloudFront pour mettre à jour une distribution web, consultez UpdateDistribution dans la Référence des API Amazon CloudFront.

Sélection des en-têtes sur lesquels baser la mise en cache

Les en-têtes que vous pouvez transmettre à l'origine et sur lesquels CloudFront base la mise en cache varient selon que votre origine est un compartiment Amazon S3 ou une origine personnalisée.

  • Amazon S3 – Vous pouvez configurer CloudFront pour réacheminer et mettre en cache vos objets en fonction d'un certain nombre d'en-têtes spécifiques (voir la liste des exceptions ci-dessous). Toutefois, nous vous recommandons d'éviter de transférer des en-têtes avec une origine Amazon S3, sauf si vous devez implémenter le partage des ressources cross-origin (CORS) ou que vous souhaitez personnaliser du contenu en utilisant Lambda@Edge dans les événements axés sur l'origine.

    • Pour configurer le partage des ressources cross-origin (CORS), vous devez transmettre des en-têtes qui permettent à CloudFront de distribuer du contenu pour des sites web qui sont activés pour le partage CORS. Pour plus d’informations, consultez Configuration de CloudFront pour respecter les paramètres CORS.

    • Pour personnaliser du contenu en utilisant des en-têtes que vous transmettez à votre origine Amazon S3, vous écrivez et ajoutez les fonctions Lambda@Edge et les associez à votre distribution CloudFront pour qu'elles soient déclenchées par un événement accessible pour l'origine. Pour plus d'informations sur l'utilisation des en-têtes afin de personnaliser du contenu, consultez Personnalisation de contenu à l'aide des en-têtes Pays ou Type d'appareil – exemples.

      Nous vous recommandons d'éviter de transférer des en-têtes que vous n'utilisez pas pour personnaliser du contenu, car le transfert d'en-têtes supplémentaires peut réduire votre taux d'accès au cache. Autrement dit, CloudFront n'est pas en mesure de traiter autant de demandes à partir des caches périphériques, par rapport à toutes les demandes.

  • Origine personnalisée – Vous pouvez configurer CloudFront pour effectuer la mise en cache en fonction de la valeur de tout en-tête de demande, à l'exception des en-têtes suivants :

    • Connection

    • Cookie – Si vous souhaitez effectuer la transmission et la mise en cache en fonction de cookies, vous utilisez un paramètre distinct dans votre distribution. Pour plus d’informations, consultez Mise en cache de contenu basée sur des cookies.

    • Host (for Amazon S3 origins)

    • Proxy-Authorization

    • TE

    • Upgrade

    Vous pouvez configurer CloudFront pour mettre en cache des objets selon les valeurs des en-têtes Date et User-Agent, mais cette pratique n'est pas recommandée. Ces en-têtes possèdent de nombreuses valeurs possibles, et la mise en cache selon leurs valeurs entraînerait la transmission par CloudFront de beaucoup plus de demandes à votre origine.

Pour obtenir la liste complète des en-têtes de requête HTTP et savoir comment CloudFront les traite, consultez En-têtes et CloudFront comportement des requêtes HTTP (personnalisés et origines d'Amazon S3).

Configuration de CloudFront pour respecter les paramètres CORS

Si vous avez activé le partage des ressources cross-origin (CORS) dans un compartiment Amazon S3 ou une origine personnalisée, vous devez choisir des en-têtes spécifiques à transmettre pour respecter les paramètres CORS. Les en-têtes que vous devez transférer diffèrent en fonction de l'origine (Amazon S3 ou origine personnalisée) et selon que vous souhaitez ou non mettre en cache les réponses OPTIONS.

Amazon S3

  • Si vous souhaitez que les réponses OPTIONS soient mises en cache, procédez comme suit :

    • Choisissez les options pour les paramètres de comportement de cache par défaut qui permettent la mise en cache pour les réponses OPTIONS.

    • Configurez CloudFront pour transférer les en-têtes suivants : Origin, Access-Control-Request-Headers et Access-Control-Request-Method.

  • Si vous ne voulez pas que les réponses OPTIONS soient mises en cache, configurez CloudFront de sorte à réacheminer l'en-tête Origin, ainsi que tous les autres en-têtes requis par votre origine (Access-Control-Request-Headers ou Access-Control-Request-Method, par exemple).

Origines personnalisées – Transmettez l'en-tête Origin en même temps que tous les autres en-têtes requis par votre origine.

Pour permettre à CloudFront de mettre en cache les réponses selon les paramètres CORS, vous devez le configurer pour transférer les en-têtes à l’aide d’une politique de cache. Pour plus d’informations, consultez Contrôle de la clé de cache à l’aide d’une politique.

Pour plus d’informations sur CORS et Amazon S3, consultez la section Utilisation du partage des ressources cross-origin (CORS) du Guide de l'utilisateur Amazon Simple Storage Service.

Configuration de la mise en cache en fonction du type d’appareil

Si vous souhaitez que CloudFront mette en cache différentes versions de vos objets en fonction de l'appareil avec lequel l'utilisateur visualise votre contenu, configurez CloudFront pour transmettre les en-têtes applicables à votre origine personnalisée :

  • CloudFront-Is-Desktop-Viewer

  • CloudFront-Is-Mobile-Viewer

  • CloudFront-Is-SmartTV-Viewer

  • CloudFront-Is-Tablet-Viewer

En fonction de la valeur de l'en-tête User-Agent, CloudFront définira la valeur de ces en-têtes sur true ou false avant de transmettre la demande à votre origine. Si un appareil entre dans plusieurs catégories, plusieurs valeurs peuvent être true. Par exemple, pour certaines tablettes, CloudFront peut définir CloudFront-Is-Mobile-Viewer et CloudFront-Is-Tablet-Viewer sur true.

Configuration de la mise en cache en fonction de la langue de l’utilisateur

Si vous souhaitez que CloudFront mette en cache différentes versions de vos objets en fonction de la langue spécifiée dans la demande, configurez-le pour transmettre l'en-tête Accept-Language à votre origine.

Configuration de la mise en cache en fonction de l’emplacement de l’utilisateur

Si vous souhaitez que CloudFront mette en cache différentes versions de vos objets en fonction du pays d'où provient la demande, configurez-le pour transmettre l'en-tête CloudFront-Viewer-Country à votre origine. CloudFront convertit automatiquement l'adresse IP d'où provient la demande en un code pays à deux lettres. Pour accéder à une liste de codes pays facile à utiliser et pouvant être triée par code et nom de pays, consultez l'entrée Wikipedia ISO 3166-1 alpha-2.

Configuration de la mise en cache en fonction du protocole de la demande

Si vous souhaitez que CloudFront mette en cache différentes versions de vos objets en fonction du protocole de la demande (HTTP ou HTTPS), configurez-le pour transmettre l'en-tête CloudFront-Forwarded-Proto à votre origine.

Configuration de mise en cache pour les fichiers compressés

Si votre origine prend en charge la compression Brotli, vous pouvez effectuer une mise en cache en fonction de l'en-tête Accept-Encoding. Configurez la mise en cache en fonction de Accept-Encoding uniquement si votre origine traite différents contenus selon l'en-tête.

Incidence de la mise en cache basée sur les en-têtes sur les performances

Lorsque vous configurez CloudFront pour effectuer la mise en cache en fonction d'un ou de plusieurs en-têtes et que les en-têtes ont plusieurs valeurs possibles, CloudFront transmet à votre serveur d'origine plus de demandes pour le même objet. Ceci ralentit les performances et augmente la charge sur votre serveur d'origine. Si votre serveur d'origine renvoie le même objet quelle que soit la valeur d'un en-tête donné, nous vous recommandons de ne pas configurer CloudFront pour effectuer la mise en cache en fonction de cet en-tête.

Si vous configurez CloudFront pour transmettre plusieurs en-têtes, l'ordre des en-têtes dans les demandes utilisateur n'a pas d'incidence sur la mise en cache dans la mesure où les valeurs sont les mêmes. Par exemple, si une demande contient les en-têtes A:1,B:2 et une autre demande contient les en-têtes B:2,A:1, CloudFront ne met en cache qu'une seule copie de l'objet.

Impact de la casse des en-têtes et des valeurs d'en-tête sur la mise en cache

Lorsque CloudFront effectue la mise en cache en fonction de valeurs d'en-tête, il ne prend pas en compte la casse du nom de l'en-tête, mais il tient compte de la casse de la valeur de l'en-tête :

  • Si des demandes utilisateur incluent Product:Acme et product:Acme, CloudFront ne met en cache un objet qu'une seule fois. La seule différence entre les deux est la casse du nom de l'en-tête qui n'a pas d'incidence sur la mise en cache.

  • Si des demandes utilisateur incluent Product:Acme et Product:acme, CloudFront met en cache un objet deux fois, car la valeur est Acme dans certaines demandes et acme dans d'autres.

En-têtes renvoyés par CloudFront à l'utilisateur

Configurer CloudFront pour transmettre et mettre en cache des en-têtes n'a pas d'incidence sur les en-têtes que CloudFront renvoie à l'utilisateur. CloudFront renvoie tous les en-têtes qu'il obtient de l'origine, à quelques exceptions près. Pour plus d'informations, consultez la rubrique applicable :