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-ControlouExpires, 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é).
- Respecte les instructions de mise en cache d'origine, telles que
Ne met pas en cache les réponses qui comportent des instructions cache-control
no-storeouprivate, 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 Instructions de contrôle de cache. |
| En-têtes de réponse | Contient une instruction de mise en cache HTTP valide, telle que dispose d'un mode de cache qui met en cache ce contenu, ou comporte un en-tête |
| 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-ModifiedouETag(un validateur). - Un en-tête HTTP
Datevalide. - Un en-tête
Content-Lengthvalide. - L'en-tête de réponse
Content-Range, en réponse à une requêteRange GET. L'en-têteContent-Rangedoit avoir une valeur valide au formatbytes x-y/z(oùzcorrespond à 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 Une directive |
| En-têtes de réponse | Comporte un en-tête Comporte un en-tête En mode |
| 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_STATICest 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_ALLmet 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_HEADERSexige 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 instructions 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-ControletExpiresdes réponses peuvent être réduits en un seul champCache-Control. Par exemple, une réponse avecCache-Control: publicetCache-Control: max-age=100sur 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 Egresspour 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 multimédia 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-ageous-maxage) en définissant le champcdnPolicy.defaultTtlsur 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 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 |
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 courant, 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, 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 ne comportent 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 | application/pdf and application/postscript |
Veuillez noter les points suivants :
- Le logiciel serveur Web d'origine doit définir le paramètre
Content-Typepour chaque réponse. De nombreux serveurs Web définissent automatiquement l'en-têteContent-Type, y compris NGINX, Varnish et Apache. - Cloud Storage définit l'en-tête
Content-Typeautomatiquement lors de l'importation lorsque vous utilisez la console Google Cloud ou la gcloud CLI pour importer des contenus. - Cloud Storage fournit toujours un en-tête
Cache-Controlà Media CDN. Si aucune valeur n'est explicitement choisie, une valeur par défaut est envoyée. Par conséquent, toutes les réponses Cloud Storage réussies sont mises en cache selon les valeurs par défaut de Cloud Storage, sauf si vous ajustez explicitement les métadonnées de contrôle du cache pour les objets dans Cloud Storage ou si vous utilisez le modeFORCE_CACHE_ALLpour remplacer les valeurs envoyées par Cloud Storage.
Si une réponse peut être mise en cache sur la base de son type MIME, mais qu'elle comporte une directive de réponse Cache-Control égale à private ou no-store, ou un en-tête Set-Cookie, elle n'est pas mise en cache.
Les autres types de contenu, tels que HTML (text/html) et JSON (application/json), ne sont pas mis en cache par défaut. Ces types de réponses sont généralement dynamiques (par utilisateur) et ne sont pas adaptés à l'architecture de Media CDN. Nous vous recommandons d'utiliser Cloud CDN pour diffuser les éléments Web et pour mettre en cache les réponses de l'API.
Configurer les valeurs TTL de cache
Les remplacements TTL (Time To Live) vous permettent de définir des valeurs TTL par défaut pour le contenu mis en cache et de remplacer les valeurs TTL définies dans les instructions de contrôle du cache max-age et s-maxage (ou les en-têtes Expires) de vos origines.
Les valeurs TTL, qu'elles soient définies par des remplacements ou à l'aide d'une instruction de cache, sont optimistes. Tout contenu rarement consulté ou peu populaire peut être évincé du cache avant que la valeur TTL ne soit atteinte.
Le tableau suivant présente trois paramètres TTL.
| Paramètre | Par défaut | Minimum | Maximum | Description | Modes de cache applicables |
|---|---|---|---|---|---|
| Default TTL | 1 heure (3 600 secondes) |
0 seconde | 1 an (31 536 000 secondes) |
Valeur TTL à définir lorsque l'origine n'a pas spécifié d'en-tête Si l'origine spécifie un en-tête Lorsque vous utilisez |
|
| Max TTL | 1 jour (86 400 secondes) |
0 seconde | 1 an (31 536 000 secondes) |
Valeur TTL maximale à autoriser pour les réponses pouvant être mises en cache. Les valeurs supérieures à celle-ci sont limitées à la valeur de maxTtl.
|
CACHE_ALL_STATIC |
| Client TTL | Non défini par défaut. | 0 seconde | 1 jour (86 400 secondes) |
Pour les réponses pouvant être mises en cache, valeur TTL maximale à autoriser dans la réponse en aval (destinée au client), si elle doit être différente des autres valeurs TTL. |
|
Si vous définissez une valeur TTL sur zéro (0 seconde), chaque requête est revalidée avec l'origine avant la diffusion d'une réponse, ce qui augmente la charge sur l'origine si elle est définie de manière trop large.
Lorsque le mode de cache est défini sur Use Origin Headers, les paramètres TTL ne peuvent pas être configurés, car Media CDN s'appuie sur l'origine pour contrôler le comportement.
Remarques :
- La valeur TTL maximale doit toujours être supérieure (ou égale) à la valeur TTL par défaut.
- La valeur TTL du client doit toujours être inférieure (ou égale) à la valeur TTL maximale.
- Lorsque Media CDN ignore une valeur TTL d'origine, l'en-tête
Cache-Controldu client reflète également cette valeur. - Si l'origine définit un en-tête
Expireset que Media CDN remplace la valeur TTL effective (en fonction de l'horodatage), l'en-têteExpiresest remplacé par un en-têteCache-Controldans la réponse en aval envoyée au client.
Cache négatif
Le cache négatif définit la façon dont les codes d'état HTTP d'échec (autres que 2xx) sont mis en cache par Media CDN.
Cela vous permet de mettre en cache les réponses d'erreur telles que les redirections (HTTP 301 et 308) et les pages introuvables (HTTP 404) plus près des utilisateurs, et aussi de réduire la charge sur l'origine si la réponse est peu susceptible de changer et peut être mise en cache.
Par défaut, la mise en cache négative est désactivée. Le tableau suivant indique les valeurs par défaut pour chaque code d'état lorsque le cache négatif est activé et que negativeCachingPolicy n'est pas utilisé.
| Codes d'état | Reason-phrase | TTL |
|---|---|---|
| HTTP 300 | Choix multiples | 10 minutes |
| HTTP 301 et HTTP 308 | Redirection permanente | 10 minutes |
| HTTP 404 | Introuvable | 120 secondes |
| HTTP 405 | Méthode introuvable | 60 secondes |
| HTTP 410 | Gone | 120 secondes |
| HTTP 451 | Inaccessible pour des raisons d'ordre juridique | 120 secondes |
| HTTP 501 | Non mise en oeuvre | 60 secondes |
L'ensemble de codes de cache négatif par défaut correspond aux codes d'état pouvant être mis en cache de façon heuristique décrits dans le document HTTP RFC 9110, avec les exceptions suivantes :
- Le code HTTP 414 (URI trop long) n'est pas compatible avec la mise en cache, afin d'éviter l'empoisonnement du cache.
- Le code HTTP 451 (non disponible pour des raisons juridiques) est compatible avec la mise en cache, comme décrit dans le document HTTP RFC 7725.
Si vous devez configurer vos propres valeurs TTL par code d'état et remplacer le comportement par défaut, vous pouvez configurer un cdnPolicy.negativeCachingPolicy. Cela vous permet de définir la valeur TTL pour n'importe lequel des codes d'état autorisés par Media CDN : 300, 301, 302, 307, 308, 400, 403, 404, 405, 410, 451, 500, 501, 502, 503 et 504.
Par exemple, pour définir une valeur TTL courte de 5 secondes pour les réponses HTTP 404 (page introuvable), et une valeur TTL de 10 secondes pour les réponses HTTP 405 (méthode non autorisée), utilisez la définition YAML suivante pour chaque route applicable :
cdnPolicy: negativeCaching: true negativeCachingPolicy: "404": 5s "405": 10s # other status codes to apply TTLs for
Pour éviter l'empoisonnement du cache, nous vous déconseillons d'activer la mise en cache pour les codes d'état HTTP 400 (requête incorrecte) ou HTTP 403 (interdit). Assurez-vous que votre serveur d'origine renvoie l'un de ces codes lorsqu'il examine uniquement les composants de la requête inclus dans la clé de cache. L'empoisonnement du cache peut se produire, par exemple, lorsque le serveur d'origine répond par une erreur HTTP 403 en l'absence d'un en-tête Authorization correct. Dans ce cas, la mise en cache de la réponse d'erreur HTTP 403 implique que Media CDN diffuse la réponse d'erreur HTTP 403 à toutes les requêtes suivantes jusqu'à ce que la valeur TTL expire, même si ces requêtes disposent d'un en-tête Authorization correct.
Pour désactiver le cache négatif, procédez comme suit :
- Pour désactiver le comportement de cache négatif par défaut, définissez
cdnPolicy.negativeCaching: falsesur une route. Notez que les réponses issues de l'origine qui incluent des instructions de cache valides et des codes d'état pouvant être mis en cache sont systématiquement mises en cache. - Pour empêcher la mise en cache négatif pour un code d'état spécifique, tout en respectant les instructions de cache de l'origine, omettez le code d'état (
cdnPolicy.negativeCachingPolicy[].code) dans votre définitionnegativeCachingPolicy. - Pour ignorer explicitement les instructions de cache de l'origine pour un code d'état spécifique, définissez
cdnPolicy.negativeCachingPolicy[].ttlsur0(zéro) pour ce code d'état.
Remarques :
- Lorsque
negativeCachingest activé sur une route et qu'une réponse définit des instructions de cache valides, les instructions de cache dans la réponse sont prioritaires. - Si vous configurez une valeur
negativeCachingPolicyexplicite et qu'une valeur TTL est définie pour le code d'état donné, la valeur TTL définie dans la stratégie est systématiquement utilisée. - La valeur maximale d'une valeur TTL définie par
negativeCachingPolicyest de 1 800 secondes (30 minutes), mais les instructions de cache d'origine avec une valeur TTL supérieure sont respectées. - Si le mode de cache est configuré en tant que
FORCE_CACHE_ALL, les instructions d'origine sont ignorées dans tous les cas.
Instructions pour le contrôle du cache
Le comportement de Media CDN par rapport aux directives