Configurer le comportement de mise en cache

Media CDN diffuse du contenu aussi près que possible des utilisateurs en utilisant l'infrastructure de mise en cache périphérique mondiale de Google afin de mettre en cache le contenu et de réduire la charge sur l'infrastructure d'origine.

Vous pouvez contrôler la mise en cache du contenu pour chaque route. Cela vous permet d'optimiser le comportement en fonction du type de contenu, des attributs de requête du client et de vos exigences d'actualisation.

Exigences de mise en cache

Les sections suivantes décrivent les réponses mises en cache par Media CDN et expliquent comment améliorer le déchargement du cache.

Comportement de mise en cache par défaut

Par défaut, les paramètres suivants liés au cache s'appliquent à chaque service de cache périphérique :

  • Mode de cache par défaut de CACHE_ALL_STATIC :

    • Respecte les instructions de mise en cache d'origine, telles que Cache-Control ou Expires, jusqu'à une valeur TTL maximale configurable.
    • Met en cache automatiquement les types de contenu multimédia statique avec une valeur TTL par défaut de 3 600 secondes, si aucune instruction de cache d'origine n'est présente.
    • Met en cache les codes d'état HTTP 200, 204 et 206 (le cache négatif n'est pas activé).
  • Ne met pas en cache les réponses qui comportent des instructions de contrôle du cache no-store ou private, ou qui ne peuvent pas être mises en cache.

Les réponses qui ne sont pas du contenu statique ou qui ne disposent pas d'instructions de mise en cache valides ne sont pas mises en cache, sauf si la mise en cache est explicitement configurée. Pour savoir comment remplacer le comportement par défaut, consultez la documentation sur les modes de cache.

Le comportement par défaut est équivalent à la cdnPolicy suivante. Les routes sans cdnPolicy explicite se comportent comme si elles avaient la configuration suivante :

cdnPolicy:
  cacheMode: CACHE_ALL_STATIC
  defaultTtl: 3600s
  cacheKeyPolicy:
    includeProtocol: false
    excludeHost: false
    excludeQueryString: false
  signedRequestMode: DISABLED
  negativeCaching: false

Réponses pouvant être mises en cache

Une réponse pouvant être mise en cache est une réponse HTTP que Media CDN peut stocker et récupérer rapidement, accélérant ainsi les temps de chargement. Certaines réponses HTTP ne peuvent pas être mises en cache.

Vous pouvez configurer les modes de cache pour chaque route afin d'outrepasser ce comportement (par exemple, en utilisant le mode de cache CACHE_ALL_STATIC pour mettre en cache les types de médias courants), même si l'origine ne définit pas une instruction de contrôle du cache dans la réponse.

Les requêtes et les réponses qui répondent aux critères définis dans la section Réponses ne pouvant pas être mises en cache prévalent aux exigences de mise en cache.

Le tableau suivant décrit les exigences de mise en cache associées à des réponses HTTP spécifiques. Les réponses GET et HEAD doivent respecter ces exigences.

Attribut HTTP Conditions requises
Code d'état Le code d'état de la réponse doit être l'un des suivants : 200, 203, 204, 206, 300, 301, 302, 307, 308, 400, 403, 404, 405, 410, 451, 500, 501, 502, 503 ou 504.
Méthodes HTTP GET et HEAD
En-têtes de requête La plupart des directives de requête de mise en cache sont ignorées. Pour en savoir plus, consultez Directives de contrôle du cache.
En-têtes de réponse

Contient une instruction de mise en cache HTTP valide, telle que Cache-Control: max-age=3600, public.

Dispose d'un mode de cache qui met en cache ce contenu, ou comporte un en-tête Expires avec une date située dans l'avenir.

Taille de la réponse Jusqu'à 100 Gio.

L'en-tête HTTP Age est défini en fonction du moment où Media CDN a mis en cache la réponse pour la première fois et représente généralement les secondes écoulées depuis que l'objet a été mis en cache à un emplacement de protection d'origine. Si votre origine génère un en-tête de réponse "Age", utilisez le mode de cache FORCE_CACHE_ALL pour éviter les revalidations lorsque l'âge dépasse la valeur TTL du cache.

Pour plus d'informations sur la manière dont Media CDN interprète les instructions de mise en cache HTTP, consultez la section Instructions de contrôle de cache.

Exigences d'origine

Pour autoriser Media CDN à mettre en cache les réponses d'origine de plus de 1 Mio, une origine doit inclure les éléments suivants dans ses en-têtes de réponse pour les requêtes GET, sauf indication contraire :

  • Un en-tête de réponse HTTP Last-Modified ou ETag (un validateur).
  • Un en-tête HTTP Date valide.
  • Un en-tête Content-Length valide.
  • L'en-tête de réponse Content-Range, en réponse à une requête Range GET. L'en-tête Content-Range doit avoir une valeur valide au format bytes x-y/z (où z correspond à la taille de l'objet).

Le protocole d'origine par défaut est HTTP/2. Si vos origines ne sont compatibles qu'avec HTTP/1.1, vous pouvez définir le champ de protocole de manière explicite pour chaque origine.

Réponses ne pouvant pas être mises en cache

Le tableau suivant détaille les attributs de requête et de réponse qui empêchent la mise en cache d'une réponse. Les réponses pouvant être mises en cache, mais qui correspondent à des critères "ne pouvant pas être mis en cache", ne sont pas mises en cache.

Attribut HTTP Exigence
Code d'état

Code d'état autre que ceux définis comme pouvant être mis en cache, tels que HTTP 401, HTTP 412 ou HTTP 505.

Ces codes d'état sont généralement représentatifs de problèmes rencontrés par le client plutôt que de l'état d'origine. La mise en cache de ces réponses peut entraîner des scénarios d'empoisonnement du cache dans lesquels une "mauvaise" réponse déclenchée par un utilisateur est mise en cache pour tous les utilisateurs.

En-têtes de requête

Pour les requêtes avec un en-tête de requête Authorization, les réponses doivent inclure une instruction Cache-Control public à mettre en cache.

Une directive no-store dans la requête empêche la mise en cache de la réponse. Pour en savoir plus, consultez Directives de contrôle du cache.

En-têtes de réponse

Comporte un en-tête Set-Cookie.

Comporte un en-tête Vary autre que Accept, Accept-Encoding, Origin, X-Origin, X-Goog-Allowed-Resources, Sec-Fetch-Dest, Sec-Fetch-Mode ou Sec-Fetch-Site.

En mode CACHE_ALL_STATIC ou USE_ORIGIN_HEADERS, comporte une directive de contrôle du cache no-store ou private.

Taille de la réponse Supérieure à 100 Gio.

Ces règles s'appliquent en plus du mode de cache configuré. Plus spécifiquement :

  • Lorsque le mode de cache CACHE_ALL_STATIC est configuré, seules les réponses considérées comme du contenu statique ou les réponses avec des instructions de cache valides dans leurs en-têtes de réponse sont mises en cache. Les autres réponses sont transmises par proxy en l'état.
  • Le mode de cache FORCE_CACHE_ALL met en cache toutes les réponses sans condition, sous réserve des exigences de non-mise en cache mentionnées précédemment.
  • Le mode de cache USE_ORIGIN_HEADERS exige que les réponses définissent des instructions de cache valides dans leurs en-têtes de réponse, en plus d'être un code d'état pouvant être mis en cache.

Remarques :

  • Pour les réponses qui ne sont pas mises en cache, les directives de contrôle du cache ou autres en-têtes ne sont pas modifiés et sont transmis par proxy en l'état.
  • Les en-têtes Cache-Control et Expires des réponses peuvent être réduits en un seul champ Cache-Control. Par exemple, une réponse avec Cache-Control: public et Cache-Control: max-age=100 sur des lignes distinctes sera réduite à Cache-Control: public,max-age=100.
  • Les réponses ne pouvant pas être mises en cache (les réponses qui ne seraient jamais mises en cache) ne sont pas comptabilisées en tant que Cache Egress pour ce qui est de la facturation.

Utiliser les modes cache

Les modes de cache vous permettent de configurer à quel moment Media CDN doit respecter les instructions de cache d'origine, mettre en cache les types de contenu statique et mettre en cache toutes les réponses de l'origine, quelles que soient les instructions définies.

Les modes de cache sont configurés au niveau de la route et, en association avec des remplacements TTL, vous permettent de configurer le comportement du cache en fonction de l'hôte, du chemin d'accès, des paramètres de requête et des en-têtes (tous les paramètres de requête pouvant être mis en correspondance).

  • Par défaut, Media CDN utilise le mode de cache CACHE_ALL_STATIC, qui met automatiquement en cache les types de contenus multimédias statiques courants pendant une heure (3 600 secondes), tout en donnant la priorité aux instructions de cache spécifiées par l'origine pour les réponses pouvant être mises en cache.
  • Vous pouvez augmenter ou diminuer la valeur TTL de cache appliquée aux réponses sans définir de valeur TTL explicite (instruction max-age ou s-maxage) en définissant le champ cdnPolicy.defaultTtl sur une route.
  • Pour éviter la mise en cache des réponses négatives plus longtemps que prévu, les codes d'état non-2xx (échecs) ne sont pas mis en cache conformément à leur Content-Type (type MIME) et n'ont pas la valeur TTL par défaut appliquée.

Les modes de cache disponibles, définis sur la valeur cdnPolicy.cacheMode de chaque route, sont présentés dans le tableau suivant.

Mode cache Comportement
USE_ORIGIN_HEADERS Exige que les réponses issues de l'origine définissent des instructions de cache et des en-têtes de mise en cache valides. Pour obtenir la liste complète des exigences, consultez Réponses pouvant être mises en cache.
CACHE_ALL_STATIC

Met automatiquement en cache les réponses réussies avec du contenu statique, sauf si elles comportent une instruction no-store ou private. Les instructions de mise en cache valides provenant de l'origine sont prioritaires.

Le contenu statique inclut les éléments vidéo, audio, image et Web courants, tels que définis par le type MIME dans l'en-tête de réponse Content-Type.

FORCE_CACHE_ALL

Met en cache les réponses réussies sans condition, en ignorant les directives de cache définies par l'origine.

Assurez-vous de ne pas diffuser de contenu privé et spécifique à l'utilisateur (par exemple, des réponses HTML ou d'API dynamiques) lorsque ce mode est configuré.

BYPASS_CACHE

Toute requête correspondant à une route avec ce mode de cache configuré contourne le cache, même si un objet mis en cache correspond à cette clé de cache.

Nous vous recommandons de n'utiliser cette option que pour le débogage, car Media CDN est conçu comme une infrastructure de cache à l'échelle mondiale, et non comme un proxy à usage général.

Types MIME de contenu statique

Le mode de cache CACHE_ALL_STATIC permet à Media CDN de mettre en cache automatiquement le contenu statique commun, tel que les éléments vidéo, audio, image et Web courants, en fonction du type MIME renvoyé dans l'en-tête de réponse HTTP Content-Type. Toutefois, quel que soit le type de contenu multimédia, Media CDN donne la priorité à tous les en-têtes Cache-Control ou Expires explicites dans la réponse d'origine.

Le tableau suivant répertorie les types MIME qui peuvent être mis en cache automatiquement avec le mode de cache CACHE_ALL_STATIC.

Les réponses ne sont pas automatiquement mises en cache si elles n'ont pas d'en-tête de réponse Content-Type avec une valeur correspondant aux valeurs suivantes. Vous devez vous assurer que la réponse définit une instruction de cache valide ou utiliser le mode de cache FORCE_CACHE_ALL pour mettre les réponses en cache sans condition.

Catégorie Types MIME
Éléments Web text/css text/ecmascript text/javascript application/javascript
Polices Tout type de contenu correspondant à font/*
Images Tout type de contenu correspondant à image/*
Vidéos Tout type de contenu correspondant à video/*
Audio Tout type de contenu correspondant à audio/*
Types de documents formatés