Diffuser du contenu obsolète

Cette page fournit des informations sur la diffusion de contenu obsolète et expiré avec Cloud CDN. La diffusion de contenu obsolète permet au cache global de Google de continuer à diffuser du contenu lorsque le serveur d'origine est inaccessible ou renvoie des erreurs à Cloud CDN.

Les raisons à cela sont les suivantes :

  • Vous préférez diffuser du contenu obsolète auprès des utilisateurs plutôt que de leur renvoyer des erreurs.
  • La diffusion de contenu obsolète évite une latence lorsque le cache reçoit une requête de contenu qui vient d'expirer. Plutôt que d'avoir à attendre une revalidation synchrone au backend, le cache diffuse le contenu obsolète qui vient d'expirer, tout en déclenchant une revalidation distincte.

Pour activer ce comportement, votre backend peut spécifier la directive stale-while-revalidate dans l'en-tête de réponse Cache-Control. Cloud CDN diffusera ensuite ce contenu depuis le cache (le cas échéant) pendant le nombre de secondes spécifié après l'expiration de l'entrée de cache. De manière asynchrone, Cloud CDN revalide le contenu avec l'origine.

Cloud CDN l'active en votre nom avec le paramètre cdnPolicy.serveWhileStale. Ce paramètre détermine le délai pendant lequel Cloud CDN peut continuer à diffuser une version obsolète une fois la réponse arrivée à expiration. S'il n'est pas spécifié dans la réponse, il s'agit de la valeur 86400s (1 jour).

Cloud CDN n'est pas compatible avec l'instruction stale-if-error. Cette directive indique au cache d'éviter de diffuser du contenu obsolète, sauf si la revalidation synchrone avec le backend a échoué avec des codes d'état d'erreur particuliers.

Les valeurs par défaut, minimale et maximale sont les suivantes :

  • Valeur par défaut : 86 400 secondes (un jour)
  • Minimale : 0 seconde (désactive la fonctionnalité)
  • Maximale : 604 800 secondes (une semaine)

Le contenu obsolète est diffusé jusqu'à la limite spécifiée après l'expiration du délai d'expiration du cache, définie par les en-têtes max-age, s-maxage ou Expires. Pour plus d'informations, consultez la section Délais d'expiration et requêtes de validation.

Si un cache périphérique Cloud CDN n'a pas de copie en cache de l'objet pour le rendre obsolète ou si la valeur TTL maximale est obsolète, Cloud CDN valide de manière synchrone le contenu avec l'origine. Si l'origine renvoie une erreur à ce moment-là, Cloud CDN renvoie l'erreur d'origine.

Logging et User-agent

Les requêtes asynchrones effectuées par Cloud CDN apparaissent sur votre serveur d'origine exactement comme les requêtes de revalidation normales qui se produisent lors de la non diffusion de contenu obsolète. En revanche, ils sont dotés d'un en-tête User-Agent contenant Cloud-CDN-Google.

Les requêtes asynchrones sont également consignées séparément dans Cloud Logging. Par conséquent, une requête utilisateur qui reçoit du contenu obsolète génère deux entrées de journal: la première pour le contenu réellement diffusé auprès de l'utilisateur et la seconde pour la requête de revalidation à l'origine. Comme les revalidations synchrones, Cloud CDN peut envoyer une requête conditionnelle dans certains cas ou simplement demander à nouveau le contenu sans condition. Dans les deux cas, le code de réponse enregistré dans Cloud Logging correspond à la requête d'origine adressée à Cloud CDN. par exemple, 200 OK pour une requête inconditionnelle ou 304 Not Modified si la réponse d'origine de l'utilisateur était conditionnelle.

Instruction de requête du client max-stale

Les clients peuvent demander un délai d'expiration plus court en spécifiant une instruction de contrôle de cache max-stale. Si spécifiée, cette instruction contrôle le niveau d'obsolescence acceptable par le client.

Si le contenu mis en cache est plus obsolète que la valeur max-stale du client, Cloud CDN revalide le contenu avant de le diffuser.

Le client ne peut pas demander une valeur max-stale supérieure à la valeur configurée avec l'option de configuration serve-while-stale et l'instruction de contrôle de cache stale-while-revalidate à partir de l'origine.

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
    

Diffuser du contenu obsolète pendant une revalidation

Console

  1. Dans Google Cloud Console, 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. Pour 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. Dans Options CDN supplémentaires, sélectionnez l'une des options suivantes pour Diffuser si obsolète :
    • 1 minute
    • 5 minutes
    • 10 minutes
    • 30 minutes
    • 1 jour (recommandé)
    • 7 jours
  8. Cliquez sur Mettre à jour.
  9. Cliquez à nouveau sur Mettre à jour.

gcloud

Pour les buckets backend, exécutez la commande gcloud compute backend-buckets create ou la commande gcloud compute backend-buckets update avec l'option --serve-while-stale.

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

gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --serve-while-stale=SECONDS
gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --serve-while-stale=SECONDS

Exemple :

gcloud compute backend-services update my-backend-service
    --serve-while-stale=180s

API

Pour les buckets 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": {
  "serveWhileStale": SECONDS
}

Désactiver la diffusion de contenu obsolète

Console

  1. Dans Google Cloud Console, 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. Pour Configuration du backend, sélectionnez un backend, puis cliquez sur Modifier.
  5. Assurez-vous que l'option Activer Cloud CDN n'est pas sélectionnée.
  6. En bas de la fenêtre, cliquez sur Configurations avancées.
  7. Sous Options CDN supplémentaires > Diffuser si obsolète, sélectionnez Désactiver la diffusion si obsolète.
  8. Cliquez sur Mettre à jour.
  9. Cliquez à nouveau sur Mettre à jour.

gcloud

Pour les buckets de backend, utilisez la commande gcloud compute backend-buckets create ou gcloud compute backend-buckets update avec l'option --serve-while-stale définie sur 0.

Pour les services de backend, exécutez la commande gcloud compute backend-services create ou la commande gcloud compute backend-services update avec l'option --serve-while-stale définie sur 0.

gcloud compute backend-services (create | update) (BACKEND_SERVICE_NAME | BACKEND_BUCKET_NAME)
    --serve-while-stale=0

API

Pour les buckets 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": {
  "serveWhileStale": 0
}