Pubblicazione di contenuti obsoleti

Questa pagina fornisce informazioni sulla pubblicazione di contenuti obsoleti e scaduti con Cloud CDN. La pubblicazione di contenuti obsoleti 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 sono i seguenti:

  • Preferisci pubblicare contenuti obsoleti per gli utenti anziché restituire errori agli utenti.
  • La pubblicazione di contenuti inattivi evita la latenza quando la cache riceve una richiesta di contenuti appena scaduti. Anziché dover attendere una riconvalida sincrona al backend, la cache gestisce i contenuti inattivi appena scaduti, attivando al contempo una riconvalida separata.

Per abilitare questo comportamento, il backend può specificare l'istruzione stale-while-revalidate nell'intestazione Cache-Control della risposta. Cloud CDN pubblicherà quindi i contenuti dalla cache (se disponibili) per il numero di secondi specificato oltre la data di scadenza della voce di cache. In modo asincrono, Cloud CDN riconvalida il contenuto con l'origine.

Cloud CDN attiva questa operazione per tuo conto con l'impostazione cdnPolicy.serveWhileStale. Questa impostazione determina per quanto tempo Cloud CDN può continuare a gestire una versione obsoleta dopo la scadenza della risposta. Se non diversamente specificato nella risposta, questo valore è 86400s (1 giorno).

Cloud CDN non supporta l'istruzione stale-if-error. Questa istruzione indica alla cache di evitare la pubblicazione di contenuti obsoleti, a meno che la riconvalida sincrona con il backend non abbia avuto esito positivo con determinati codici di stato di errore.

I valori predefiniti, minimi e massimi sono i seguenti:

  • Valore predefinito: 86.400 secondi (un giorno)
  • Minimo: 0 secondi (disattiva la funzione)
  • Massimo: 604.800 secondi (una settimana)

I contenuti inattivi vengono pubblicati fino al limite specificato dopo il tempo di scadenza della voce di cache, che è definito dalle intestazioni max-age, s-maxage o Expires. Per ulteriori informazioni, consulta Tempi di scadenza e richieste di convalida.

Se una cache perimetrale di Cloud CDN non ha una copia memorizzata nella cache dell'oggetto da pubblicare inattivo o se l'oggetto ha raggiunto il TTL massimo inattivo, Cloud CDN riconvalida in modo sincrono il contenuto con l'origine. Se l'origine restituisce un errore in quel momento, Cloud CDN restituisce l'errore dell'origine.

Logging e user agent

Le richieste asincrone effettuate da Cloud CDN appaiono al tuo server di origine esattamente come le normali richieste di riconvalida che si verificano quando non pubblichi contenuti inattivi. L'unica eccezione è che sono taggati con un'intestazione User-Agent contenente Cloud-CDN-Google.

Inoltre, le richieste asincrone vengono registrate separatamente in Cloud Logging, pertanto una richiesta dell'utente che è obsoleta genera due voci di log: la prima per i contenuti effettivamente forniti all'utente e la seconda per la richiesta di riconvalida all'origine. Come per le riconvalide sincrone, in alcune circostanze Cloud CDN può inviare una richiesta condizionale o semplicemente richiedere nuovamente i contenuti incondizionatamente. In entrambi i casi, il codice di risposta registrato in Cloud Logging corrisponde alla richiesta originale a Cloud CDN; ad esempio, un 200 OK per una richiesta incondizionata o un 304 Not Modified se la risposta originale dell'utente era condizionale.

Istruzione di richiesta max-stale del client

I client possono richiedere un tempo di servizio inattivo più breve specificando un'istruzione max-stale cache-control. Se specificata, questa istruzione controlla la quantità di inattività tollerata dal client.

Se i contenuti memorizzati nella cache sono più vecchi del valore max-stale del client, Cloud CDN riconvalida il contenuto 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 dall'origine.

Prima di iniziare

  • Leggi ulteriori informazioni sulle modalità cache e sui contenuti statici.

  • Assicurati che Cloud CDN sia abilitato. Per le istruzioni, consulta Utilizzo di Cloud CDN.

  • Se necessario, esegui l'aggiornamento all'ultima versione di Google Cloud CLI:

    gcloud components update
    

Pubblica contenuti inattivi durante la riconvalida

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. In Configurazione backend, seleziona un backend, quindi fai clic su Modifica.
  5. Assicurati che l'opzione Abilita Cloud CDN sia selezionata.
  6. Nella parte inferiore della finestra, fai clic su Configurazioni avanzate.
  7. In Opzioni CDN aggiuntive, seleziona una delle seguenti opzioni per Pubblica quando inattivo:
    • 1 minuto
    • 5 minuti
    • 10 minuti
    • 30 minuti
    • 1 giorno (consigliato)
    • 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 o 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 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": SECONDS
}

Disattiva 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 del bilanciatore del carico delle applicazioni esterno.
  3. Fai clic su Modifica.
  4. In Configurazione backend, seleziona un backend, quindi 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 Disattiva pubblicazione quando inattivo.
  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 o 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 o 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 la chiamata API Method: backendBuckets.insert o Method: backendBuckets.update.

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
}