Mise en cache de contenu basée sur des en-têtes de requêtes - Amazon CloudFront

Si nous fournissons une traduction de la version anglaise du guide, la version anglaise du guide aura préséance en cas de contradiction. La traduction sera une traduction automatique.

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

Pour les distributions web, CloudFront vous permet de choisir si vous souhaitez que CloudFront réachemine les en-têtes vers votre origine et mette en cache des versions distinctes d'un objet spécifié en fonction des valeurs d'en-tête dans des requête de l'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. Pour les distributions RTMP, vous ne pouvez pas configurer CloudFront pour effectuer la mise en cache en fonction de valeurs d'en-tête.

Note

Pour les distributions RTMP, vous ne pouvez pas configurer CloudFront pour mettre en cache vos contenus en fonction des en-têtes des demandes d'utilisateur.

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 des 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 réacheminer des en-têtes vers l'origine, ce qui entraîne la mise en cache par CloudFront de plusieurs versions d'un objet selon les valeurs d'un ou plusieurs en-têtes de requête. 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.

Supposons, par exemple, que les requêtes de visionneuse logo.jpg contenir un Product en-tête ayant une valeur de Acme ou Apex. Lorsque vous configurez CloudFront pour mettre en cache vos objets en fonction de la valeur du Product en-tête, CloudFront transmet les demandes pour logo.jpg à l’origine et inclut Product valeurs en-tête et en-tête. CloudFront caches logo.jpg une fois pour les demandes dans lesquelles la valeur du Product en-tête est Acme et une fois pour les demandes dans lesquelles la valeur est Apex.

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

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

    Important

    Si vous configurez CloudFront pour réacheminer tous les en-têtes vers votre origine, CloudFront ne met pas en cache les objets associés à ce comportement de cache. Par contre, il envoie chaque demande à l'origine.

  • Réacheminer une liste blanche 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 réachemine également les en-têtes réacheminés 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 qu'il est possible d'ajouter en liste blanche pour chaque comportement de cache, ou pour demander un quota supérieure, consultez Quotas sur les en-têtes personnalisés dans la liste blanche (distributions web uniquement).

Pour plus d'informations sur l'utilisation de la console CloudFront pour mettre à jour une distribution afin que CloudFront réachemine les en-têtes vers l'origine, consultez Mise à jour d'une distribution. Pour plus d'informations sur l'utilisation de l'API CloudFront pour mettre à jour une distribution existante, consultez Mise à jour d'une distribution dans le document Amazon CloudFront API Reference.

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

Les en-têtes que vous pouvez réacheminer vers 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 mettre en liste blanche des en-têtes avec une origine Amazon S3, sauf si vous devez implémenter le partage des ressources cross-origine (CORS) ou souhaitez personnaliser du contenu en utilisant Lambda@Edge dans des événements accessibles pour 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 réacheminez vers 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 mettre en liste blanche 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 requête, à l'exception des en-têtes suivants :

    • Connection

    • Cookie – Si vous souhaitez effectuer le réacheminement 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 ceci n'est pas recommandé. 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 de requête HTTP et comportement de CloudFront (origines S3 et personnalisée).

Configuration de CloudFront pour respecter les paramètres CORS

Si vous avez activé le partage des ressources cross-origine (CORS) sur 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 réacheminer diffèrent en fonction de l'origine (Amazon S3 ou personnalisée) et du fait que vous souhaitiez 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.

    • Configurer CloudFront pour transmettre 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 – Réacheminez l'en-tête Origin en même temps que tous les autres en-têtes requis par votre origine.

Vous configurez CloudFront de sorte à réacheminer les en-têtes en les plaçant en liste blanche dans un comportement de cache pour votre distribution CloudFront. Pour de plus amples informations sur l'utilisation du réacheminement des en-têtes, veuillez consulter En-têtes et distributions web - Présentation.

Pour de plus amples informations sur CORS et Amazon S3, veuillez consulter Activation du partage des ressources cross-origin dans le Amazon Simple Storage Service Manuel du développeur.

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éfinit la valeur de ces en-têtes sur true ou false avant de réacheminer la requête vers votre origine. Si un périphérique tombe dans plusieurs catégories, il peut être possible de true. Par exemple, pour certaines tablettes, CloudFront peut être réglé CloudFront-Is-Mobile-Viewer et CloudFront-Is-Tablet-Viewer vers 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 CloudFront 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 depuis lequel la requête provient, configurez CloudFront pour réacheminer l'en-tête CloudFront-Viewer-Country vers votre origine. CloudFront convertit automatiquement l'adresse IP d'où est issue la requête 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 requête (HTTP ou HTTPS), configurez CloudFront pour réacheminer l'en-tête CloudFront-Forwarded-Proto vers votre origine.

Configuration de mise en cache pour les fichiers compressés

Si votre origine prend en charge la compression Brotli, vous pouvez mettre en liste blanche l'en-tête Accept-Encoding et effectuer la mise en cache en fonction de l'en-tête. Configurez la mise en cache en fonction de l'en-tête 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 plusieurs en-têtes et que les en-têtes ont plusieurs valeurs possibles, CloudFront réachemine vers votre serveur d'origine plus de requêtes 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 d'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 requête d'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 requêtes d'utilisateur incluent Product:Acme et Product:acme, CloudFront met en cache un objet deux fois, parce que la valeur est Acme dans certaines requêtes et acme dans d'autres.

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

Configurer CloudFront pour réacheminer 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.