Pubblicazione di contenuti obsoleti

Questa pagina fornisce informazioni sulla pubblicazione di contenuti obsoleti e scaduti con con Cloud CDN. La pubblicazione di contenuti non aggiornati consente alla cache globale di Google di continuare a pubblicare contenuti quando il server di origine non è raggiungibile o restituisce errori a Cloud CDN.

I motivi per farlo sono i seguenti:

  • Preferisci pubblicare contenuti obsoleti per gli utenti anziché restituire errori.
  • La pubblicazione di contenuti obsoleti evita la latenza quando la cache riceve una richiesta di contenuti. scaduto. Anziché dover attendere una convalida sincrona nel backend, la cache pubblica i contenuti obsoleti che sono appena scaduti, attivando contemporaneamente una convalida separata.

Per abilitare questo comportamento, il backend può specificare stale-while-revalidate nell'intestazione Cache-Control della risposta. Cloud CDN poi li pubblicherà dalla cache (se disponibile) per il numero di secondi specificato dopo il momento di scadenza della voce della cache. Cloud CDN in modo asincrono riconvaliderà i contenuti con l'origine.

Cloud CDN lo attiva per tuo conto con l'impostazionecdnPolicy.serveWhileStale. Questa impostazione indica per quanto tempo, dopo la scadenza della risposta, Cloud CDN può continuare a pubblicare una versione obsoleta. Se non diversamente specificato nella risposta, il valore è 86400s (1 giorno).

Cloud CDN non supporta la direttiva stale-if-error. Questa direttiva indica alla cache di evitare di pubblicare contenuti obsoleti, a meno che la convalida sincrona con il backend non sia riuscita con codici di stato di errore specifici.

I valori predefiniti, minimo e massimo sono i seguenti:

  • Valore predefinito: 86.400 secondi (un giorno)
  • Valore minimo: 0 secondi (la funzionalità viene disattivata)
  • Massimo: 604.800 secondi (una settimana)

I contenuti obsoleti vengono pubblicati fino al limite specificato dopo la voce della cache scadenza, definita da max-age, s-maxage o Expires intestazioni. Per ulteriori informazioni, consulta la sezione Tempi di scadenza e convalida richieste.

Se una cache perimetrale di Cloud CDN non ha una copia memorizzata nella cache dell'oggetto è inattivo, oppure l'oggetto ha raggiunto il TTL massimo inattivo: Cloud CDN riconvalida in modo sincrono i contenuti con l'origine. Se l'origine restituisce un errore in quel momento, Cloud CDN restituisce l'errore di origine.

Logging e user agent

Le richieste asincrone effettuate da Cloud CDN appaiono alla tua origine esattamente come le normali richieste di riconvalida che si verificano quando non viene eseguito i contenuti obsoleti. L'eccezione è che sono contrassegnati da un'intestazione User-Agent contenente Cloud-CDN-Google.

Anche le richieste asincrone vengono registrate separatamente in Cloud Logging, pertanto una richiesta dell'utente non aggiornata genera due voci di log: la prima per i contenuti effettivamente pubblicati per l'utente e la seconda per la richiesta di convalida nuovamente all'origine. Come per le riconvalide sincrone, Cloud CDN può inviare richiesta condizionale in alcune circostanze, o richiedere nuovamente i contenuti incondizionatamente. In entrambi i casi, la risposta registrato in Cloud Logging corrisponde alla richiesta originale Cloud CDN; ad esempio 200 OK per una richiesta incondizionata o 304 Not Modified se la risposta originale dell'utente era condizionale.

Istruzione richiesta max-stale client

I client possono richiedere un tempo di servizio non valido più breve specificando una direttiva cache-control max-stale. Se specificata, questa direttiva controlla la quantità di устарелость tollerata dal client.

Se i contenuti memorizzati nella cache sono più vecchi del valore max-stale del client, Cloud CDN riconvalida i contenuti prima della pubblicazione.

Il client non può richiedere un valore max-stale maggiore del valore configurato con l'opzione di configurazione serve-while-stale e la direttiva cache-control stale-while-revalidate dell'origine.

Prima di iniziare

  • Ulteriori informazioni sulle modalità cache e sui contenuti statici.

  • Assicurati che Cloud CDN sia abilitato. per le istruzioni, vedi Utilizzo di Cloud CDN.

  • Se necessario, esegui l'aggiornamento alla versione più recente di Google Cloud CLI:

    gcloud components update
    

Pubblicare contenuti obsoleti durante la convalida

Console

  1. Nella console Google Cloud, vai alla pagina Bilanciamento del carico.

    Vai a Bilanciamento del carico

  2. Fai clic sul nome del bilanciatore del carico delle applicazioni esterno.
  3. Fai clic su Modifica.
  4. Per Configurazione backend, seleziona un backend e fai clic su Modifica.
  5. Assicurati che l'opzione Attiva Cloud CDN sia selezionata.
  6. Nella parte inferiore della finestra, fai clic su Configurazioni avanzate.
  7. Per Opzioni CDN aggiuntive, seleziona una delle opzioni seguenti per Pubblicare quando inattivo:
    • 1 minuto
    • 5 minuti
    • 10 minuti
    • 30 minuti
    • 1 giorno (opzione consigliata)
    • 7 giorni
  8. Fai clic su Aggiorna.
  9. Fai di nuovo clic su Aggiorna.

gcloud

Per i bucket di backend, utilizza il comando gcloud compute backend-buckets create oppure il comando gcloud compute backend-buckets update con il flag --serve-while-stale.

Per i servizi di backend, utilizza il comando gcloud compute backend-services create o il comando gcloud compute backend-services update con il flag --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

Ad esempio:

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

API

Per i bucket di backend, utilizza la chiamata API Method: backendBuckets.insert o Method: backendBuckets.update.

Per i servizi di backend, utilizza Method: backendServices.insert oppure Method: backendServices.update chiamata API.

Utilizza una delle seguenti chiamate API:

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

Aggiungi il seguente snippet al corpo della richiesta JSON:

"cdnPolicy": {
  "serveWhileStale": SECONDS
}

Disattivare la pubblicazione di contenuti obsoleti

Console

  1. Nella console Google Cloud, vai alla pagina Bilanciamento del carico.

    Vai a Bilanciamento del carico

  2. Fai clic sul nome dell'Application Load Balancer esterno.
  3. Fai clic su Modifica.
  4. In Configurazione del backend, seleziona un backend e poi fai clic su Modifica.
  5. Assicurati che l'opzione Attiva Cloud CDN non sia selezionata.
  6. Nella parte inferiore della finestra, fai clic su Configurazioni avanzate.
  7. Per Opzioni CDN aggiuntive > Pubblica quando inattivo, seleziona Disattivare la pubblicazione quando inattivo.
  8. Fai clic su Aggiorna.
  9. Fai di nuovo clic su Aggiorna.

gcloud

Per i bucket di backend, utilizza la classe gcloud compute backend-buckets create o Comando gcloud compute backend-buckets update con il valore del flag --serve-while-stale impostato su 0.

Per i servizi di backend, utilizza il comando gcloud compute backend-services create oppure Il comando gcloud compute backend-services update con il valore del flag --serve-while-stale impostato su 0.

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

API

Per i bucket di backend, utilizza Method: backendBuckets.insert oppure Method: backendBuckets.update chiamata API.

Per i servizi di backend, utilizza la chiamata API Method: backendServices.insert o Method: backendServices.update.

Utilizza una delle seguenti chiamate API:

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

Aggiungi il seguente snippet al corpo della richiesta JSON:

"cdnPolicy": {
  "serveWhileStale": 0
}