Utiliser la mise en cache négative

Cette page explique l'utilisation de la mise en cache négative avec Cloud CDN. La mise en cache négative permet de définir une valeur TTL différente pour chaque code d'état,

afin d'appliquer un contrôle précis sur la mise en cache des erreurs ou des redirections courantes. Ce processus peut réduire la charge pesant sur vos origines et améliorer l'expérience de l'utilisateur final en réduisant la latence des réponses.

Avant de commencer

  • En savoir plus sur les modes de cache et le contenu statique

  • Assurez-vous que Cloud CDN est activé. Pour obtenir des instructions, consultez la page Utiliser Cloud CDN.

  • Si nécessaire, installez la dernière version de Google Cloud CLI :

    gcloud components update
    

Codes d'état et valeurs TTL par défaut

La mise en cache négative s'applique à des codes d'état spécifiques, répertoriés dans le tableau ci-dessous.

Cloud CDN applique les valeurs TTL par défaut suivantes à ces codes d'état :

Code d'état Signification Valeur TTL
HTTP 300 Choix multiples 10 minutes
HTTP 301 et 308 Redirections permanentes 10 minutes
HTTP 302 et 307 Redirections temporaires Non mis en cache par défaut
HTTP 404 Introuvables 120 secondes
HTTP 405 Méthode introuvable 60 secondes
HTTP 410 Supprimé 120 secondes
HTTP 451 Inaccessible pour des raisons d'ordre juridique 120 secondes
HTTP 501 Non mis en œuvre 60 secondes

Vous pouvez remplacer ces valeurs par défaut via la mise en cache négative en définissant une valeur TTL de cache pour le code d'état HTTP spécifié.

Configurer la mise en cache négative

La mise en cache négative vous permet de configurer votre service pour qu'il mette en cache à la fois les échecs et les réussites. Cela permet à Cloud CDN de protéger les origines des requêtes qui génèrent des erreurs (telles que 404 Introuvable) de la même manière qu'il protège les origines des requêtes qui génèrent des réponses positives.

Console

  1. Dans la console Google Cloud, accédez à la page Équilibrage de charge.

    Accéder à la page Équilibrage de charge

  2. Cliquez sur le nom de votre équilibreur de charge d'application externe.
  3. Cliquez sur Modifier .
  4. Dans Configuration du backend, sélectionnez un backend, puis cliquez sur Modifier .
  5. Assurez-vous que l'option Activer Cloud CDN est sélectionnée.
  6. En bas de la fenêtre, cliquez sur Configurations avancées.
  7. Cliquez sur Activer la mise en cache négative.
  8. Cliquez sur Ajouter une règle de mise en cache négative.
    1. Saisissez un code d'état HTTP.
    2. Sélectionnez une valeur de TTL (Time To Live).
  9. Cliquez sur Mettre à jour.
  10. Cliquez à nouveau sur Mettre à jour.

gcloud

Pour les buckets de backend, exécutez la commande gcloud compute backend-buckets create ou gcloud compute backend-buckets update avec l'option --negative-caching.

Pour les services de backend, exécutez la commande gcloud compute backend-services create ou gcloud compute backend-services update avec l'option --negative-caching.

gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --negative-caching
gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --negative-caching

Pour activer la mise en cache négative de seulement deux réponses d'erreur spécifiques, par exemple, configurez les réponses avec le code d'état 404 pour qu'elles soient mises en cache pendant 60 secondes, et les réponses avec le code d'état 405 pour qu'elles soient mises en cache pendant 120 secondes.

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --negative-caching \
    --cache-mode=CACHE_ALL_STATIC \
    --default-ttl=86400 \
    --negative-caching-policy='404=60,405=120'

api

Pour les buckets de backend, utilisez l'appel d'API Method: backendBuckets.insert ou Method: backendBuckets.update.

Pour les services de backend, utilisez l'appel d'API Method: backendServices.insert ou Method: backendServices.update.

Utilisez l'un des appels d'API suivants :

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE

Ajoutez l'extrait suivant au corps de la requête JSON :

"cdnPolicy": {
  "negativeCaching": ON,
  "negativeCachingPolicy": [
    {
      "code": STATUS_CODE,
      "ttl": TTL_SECONDS
    }
  ]
}

La mise en cache négative doit être activée pour que vous puissiez configurer les paramètres de la règle de mise en cache négative (negativeCachingPolicy). Si vous omettez la règle et que la mise en cache négative (negativeCaching) est activée, Cloud CDN utilise les valeurs par défaut répertoriées dans la section Codes d'état et valeurs TTL par défaut.

Lorsque vous spécifiez une règle de mise en cache négative, veillez à spécifier une valeur TTL de cache pour tous les codes de réponse que vous souhaitez mettre en cache. Cloud CDN n'applique aucune mise en cache négative par défaut lorsqu'une règle existe.

Pour STATUS_CODE, vous pouvez spécifier les codes d'état HTTP suivants:

  • 300, 301, 302, 307 et 308
  • 404, 405, 410, 421, 451
  • 501

Pour chaque code d'état, vous pouvez spécifier le nombre de secondes pendant lequel mettre en cache les réponses. Pour désactiver la mise en cache négative du code d'état, excluez-le de votre règle de mise en cache négative.

La valeur maximale autorisée est de 1 800 secondes (30 minutes). Toutefois, les objets rarement utilisés peuvent être supprimés du cache avant la valeur TTL définie.

Lorsque le mode de cache est défini sur CACHE_ALL_STATIC ou USE_ORIGIN_HEADERS, la mise en cache négative est appliquée aux réponses qui présentent le code de réponse spécifié et ne comportent pas d'en-tête Cache-Control ou Expires.

Lorsque le mode de cache est défini sur FORCE_CACHE_ALL, la mise en cache négative remplace les en-têtes de mise en cache définis par l'origine. Cloud CDN met en cache la réponse pendant la durée spécifiée par la valeur TTL, ou ne la met pas en cache du tout si aucune valeur TTL n'est définie.

En outre, lorsque le mode de cache est défini sur FORCE_CACHE_ALL, Cloud CDN modifie également le max-age envoyé au client dans l'en-tête Cache-Control. En particulier, si un paramètre TTL est configuré pour une erreur donnée, Cloud CDN utilise le paramètre TTL inférieur et le paramètre de configuration client_ttl, et envoie un en-tête Cache-Control: public,max-age=N avec cette valeur. Si aucun paramètre TTL n'est configuré pour une erreur donnée, Cloud CDN supprime l'en-tête Cache-Control envoyé par l'origine. Cloud CDN supprime également toujours tout en-tête Expires envoyé par l'origine.

Si la mise en cache négative est initialement activée pour une origine, puis désactivée (manuellement ou en désactivant la mise en cache pour un code de réponse particulier), les réponses d'erreur mises en cache sont considérées comme valides uniquement en fonction de leurs en-têtes Cache-Control ou Expires. Par conséquent, une fois la mise en cache négative désactivée, une réponse sans instruction d'âge de mise en cache dans ses en-têtes n'est pas diffusée à partir du cache.

Cloud CDN met en cache en réponse aux requêtes GET. Pour en savoir plus, consultez Contenu pouvant être mis en cache.

Chaque entrée de cache est identifiée par une clé de cache.

Désactiver la mise en cache négative

Console

  1. Dans la console Google Cloud, accédez à la page Équilibrage de charge.

    Accéder à la page Équilibrage de charge

  2. Cliquez sur le nom de votre équilibreur de charge d'application externe.
  3. Cliquez sur Modifier .
  4. Dans Configuration du backend, sélectionnez un backend, puis cliquez sur Modifier .
  5. Assurez-vous que l'option Activer Cloud CDN est sélectionnée.
  6. En bas de la fenêtre, cliquez sur Configurations avancées.
  7. Décochez la case Activer la mise en cache négative.
  8. Cliquez sur Mettre à jour.
  9. Cliquez à nouveau sur Mettre à jour.

gcloud

Pour les buckets de backend, exécutez la commande gcloud compute backend-buckets create ou gcloud compute backend-buckets update avec l'option --no-negative-caching.

Pour les services de backend, exécutez la commande gcloud compute backend-services create ou gcloud compute backend-services update avec l'option --no-negative-caching.

gcloud compute backend-services (create | update) (BACKEND_SERVICE_NAME | BACKEND_BUCKET_NAME)
    --no-negative-caching

api

Pour les buckets de backend, utilisez l'appel d'API Method: backendBuckets.insert ou Method: backendBuckets.update.

Pour les services de backend, utilisez l'appel d'API Method: backendServices.insert ou Method: backendServices.update.

Utilisez l'un des appels d'API suivants :

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE

Ajoutez l'extrait suivant au corps de la requête JSON :

"cdnPolicy": {
  "negativeCaching": OFF
}