View a markdown version of this page

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

Avec CloudFront, vous pouvez choisir de transférer les en-têtes CloudFront vers votre origine et de mettre en cache des versions distinctes d'un objet spécifié en fonction des valeurs d'en-tête des requêtes des spectateurs. Vous pouvez ainsi diffuser différentes versions de votre contenu en fonction de l'appareil utilisé par l'utilisateur, de l'emplacement du spectateur, de la langue utilisée par le spectateur et de divers autres critères.

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

Par défaut, les en-têtes CloudFront ne sont pas pris en compte 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 ne diffèrent que par les valeurs des en-têtes de demande, une seule version de l'objet est mise en CloudFront cache.

Vous pouvez configurer CloudFront pour transférer les en-têtes vers l'origine, ce qui entraîne la mise CloudFront en cache de plusieurs versions d'un objet en fonction des valeurs d'un ou de plusieurs en-têtes de demande. CloudFront Pour configurer la mise en cache des objets en fonction des valeurs d'en-têtes spécifiques, vous devez spécifier 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 la mise en cache de vos objets en fonction de la valeur de l'Producten-tête, CloudFront transférez les demandes logo.jpg à l'origine et incluez l'Producten-tête et les valeurs d'en-tête. CloudFront met en cache logo.jpg une fois pour les requêtes contenant la valeur de l'Producten-tête Acme et une fois pour les requêtes contenant cette valeur. 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 anciens paramètres de cache  : si vous configurez CloudFront pour transférer tous les en-têtes vers votre origine, les objets associés à ce comportement de cache CloudFront ne sont pas mis en cache. Par contre, il envoie chaque demande à l'origine.

  • Transférez la liste des en-têtes que vous spécifiez. CloudFront met en cache vos objets en fonction des valeurs de tous les en-têtes spécifiés. CloudFront transmet également les en-têtes qu'il transmet 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, vos objets CloudFront ne sont pas mis en cache en fonction des 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 CloudFront console pour mettre à jour une distribution afin CloudFront de transmettre les en-têtes à l'origine, consultezMettre à jour une distribution. Pour plus d'informations sur l'utilisation de l' CloudFrontAPI pour mettre à jour une distribution existante, consultez la section Mettre à jour la distribution dans le Amazon CloudFront API Reference.

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 repose CloudFront 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 transférer et mettre en cache vos objets en fonction d'un certain nombre d'en-têtes spécifiques (voir la liste d'exceptions suivante). 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 CORS, vous devez transférer des en-têtes qui permettent CloudFront de distribuer du contenu pour les sites Web qui sont activés pour le partage de ressources entre origines (CORS). Pour plus d’informations, consultez Configurer CloudFront pour respecter les paramètres CORS.

    • Pour personnaliser le contenu à l'aide d'en-têtes que vous transférez vers votre origine Amazon S3, vous écrivez et ajoutez des fonctions Lambda @Edge et vous les associez à votre CloudFront distribution qui sera déclenchée par un événement lié à 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. En d'autres termes, il ne CloudFront peut pas traiter autant de demandes provenant de caches périphériques que par rapport à l'ensemble des demandes.

  • Origine personnalisée  : vous pouvez configurer la mise CloudFront en cache en fonction de la valeur de n'importe quel en-tête de demande, à l'exception des 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 CloudFront configurer la mise en cache des objets en fonction des valeurs User-Agent des en-têtes Date et, mais nous ne le recommandons pas. Ces en-têtes ont de nombreuses valeurs possibles, et la mise en cache basée sur leurs valeurs peut entraîner le transfert d'un plus grand nombre de demandes CloudFront vers votre origine.

Pour obtenir la liste complète des en-têtes de requêtes HTTP et la manière dont ils CloudFront sont traités, consultezEn-têtes et CloudFront comportement des requêtes HTTP (origines personnalisées et Amazon S3).

Configurer 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 : OriginAccess-Control-Request-Headers, etAccess-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.

CloudFront Pour configurer la mise en cache des réponses basées sur CORS, vous devez configurer CloudFront 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 CloudFront mettre en cache différentes versions de vos objets en fonction de l'appareil qu'un utilisateur utilise pour afficher votre contenu, configurez CloudFront pour transférer les en-têtes applicables vers 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'User-Agenten-tête, CloudFront définit la valeur de ces en-têtes à 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 vous pouvez définir CloudFront-Is-Tablet-Viewer à la fois CloudFront-Is-Mobile-Viewer et surtrue.

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

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

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

Si vous souhaitez CloudFront mettre en cache différentes versions de vos objets en fonction du pays d'origine de la demande, configurez CloudFront pour transférer l'CloudFront-Viewer-Countryen-tête vers votre origine. CloudFront convertit automatiquement l'adresse IP d'origine de la demande en un code de 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 CloudFront mettre en cache différentes versions de vos objets en fonction du protocole de la requête, HTTP ou HTTPS, configurez CloudFront pour transmettre l'CloudFront-Forwarded-Protoen-tête à 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 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 vous transférez d'autres demandes à votre serveur d'origine 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 la mise CloudFront en cache en fonction de cet en-tête.

Si vous configurez CloudFront pour transférer plusieurs en-têtes, l'ordre des en-têtes dans les requêtes des spectateurs n'affecte pas la mise en cache tant que les valeurs sont les mêmes. Par exemple, si une demande contient les en-têtes A:1 B:2 et qu'une autre en contientB:2,A:1, met en CloudFront cache 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 les caches sont basés sur des valeurs d'en-tête, il ne prend pas en compte le cas du nom de l'en-tête, mais le cas de la valeur de l'en-tête :

  • Si les demandes de l'utilisateur incluent à la fois Product:Acme etproduct:Acme, ne met en CloudFront 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 les demandes de l'utilisateur incluent à la fois Product:Acme etProduct:acme, un objet est mis en CloudFront cache deux fois, car la valeur se trouve Acme dans certaines requêtes et acme dans d'autres.

En-têtes qui CloudFront renvoient au visualiseur

La configuration CloudFront pour transférer et mettre en cache les en-têtes n'a aucune incidence sur les en-têtes CloudFront renvoyés au visualiseur. 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 :