Como exibir conteúdo desatualizado

Nesta página, você encontra informações sobre como exibir conteúdo desatualizado e expirado com o Cloud CDN. A exibição de conteúdo desatualizado permite que o cache global do Google continue exibindo o conteúdo quando o servidor de origem estiver inacessível ou retornando erros para o Cloud CDN.

Os motivos para fazer isso são os seguintes:

  • você prefere exibir conteúdo desatualizado para os usuários em vez de retornar erros aos usuários.
  • A exibição de conteúdo desatualizado evita latência quando o cache recebe uma solicitação de conteúdo que acabou de expirar. Em vez de ter que esperar por uma revalidação síncrona para o back-end, o cache exibe o conteúdo desatualizado que acabou de expirar, enquanto aciona uma revalidação separada.

Para ativar esse comportamento, o back-end pode especificar a diretiva stale-while-revalidate no cabeçalho Cache-Control de resposta. O Cloud CDN então veiculará esse conteúdo pelo cache (se disponível) pelo número especificado de segundos após o prazo de validade da entrada no cache. De maneira assíncrona, o Cloud CDN revalidará o conteúdo com a origem.

O Cloud CDN permitirá isso em seu nome com a configuração cdnPolicy.serveWhileStale. Essa configuração determina quanto tempo, após a expiração da resposta, o Cloud CDN pode continuar exibindo uma versão desatualizada. Se não for especificado de outra forma na resposta, será 86400s (1 dia).

O Cloud CDN não é compatível com a diretiva stale-if-error. Essa diretiva instrui o cache a evitar a exibição de conteúdo desatualizado, a menos que a revalidação síncrona com o back-end tenha falhado com códigos de status de erro específicos.

Os valores padrão, mínimo e máximo são os seguintes:

  • Padrão: 86.400 segundos (um dia)
  • Mínimo: 0 segundo (desativa o recurso)
  • Máximo: 604.800 segundos (uma semana)

O conteúdo desatualizado é exibido até o limite especificado após o prazo de validade da entrada em cache, que é definido pelos cabeçalhos max-age, s-max-age ou Expires. Para mais informações, consulte Prazos de validade e solicitações de validação.

Se um armazenamento em cache próximo dos usuários finais do Cloud CDN não tiver uma cópia armazenada em cache do objeto para exibir o desatualizado ou se o objeto tiver atingido o TTL máximo desatualizado, o Cloud CDN revalidará o conteúdo de maneira síncrona com a origem. Se a origem retornar um erro naquele momento, o Cloud CDN retornará o erro de origem.

Logging e user agent

As solicitações assíncronas feitas pelo Cloud CDN aparecem para seu servidor de origem exatamente como as solicitações de revalidação normais que ocorrem quando o conteúdo obsoleto não é veiculado. A exceção é que elas são marcadas com um cabeçalho User-Agent contendo Cloud-CDN-Google.

As solicitações assíncronas também são registradas separadamente no Cloud Logging. Portanto, uma solicitação de usuário desatualizada gera duas entradas de registro: a primeira para o conteúdo realmente veiculado ao usuário e a segunda para a solicitação de revalidação à origem. Assim como as revalidações síncronas, o Cloud CDN pode enviar uma solicitação condicional em algumas circunstâncias ou apenas solicitar novamente o conteúdo incondicionalmente. Em ambos os casos, o código de resposta registrado no Cloud Logging corresponde à solicitação original para o Cloud CDN. Por exemplo, um 200 OK para uma solicitação não condicional ou um 304 Not Modified se a resposta original do usuário for condicional.

Diretiva de solicitação max-stale do cliente

Os clientes podem solicitar um tempo de serviço desatualizado mais curto especificando uma diretiva de controle de cache max-stale. Se especificado, esta diretiva controla o tempo de inatividade que o cliente tolera.

Se o conteúdo em cache for mais antigo do que o valor de max-stale do cliente, o Cloud CDN revalidará o conteúdo antes da exibição.

O cliente não pode solicitar um valor de max-stale maior que o valor configurado com a opção de configuração serve-while-stale e a diretiva de controle de cache stale-while-revalidate da origem.

Antes de começar

  • Leia sobre modos de cache e conteúdo estático.

  • Verifique se o Cloud CDN está ativado. Para instruções, consulte Como usar o Cloud CDN.

  • Se necessário, atualize para a versão mais recente da CLI do Google Cloud:

    gcloud components update
    

Exibição de conteúdo desatualizado durante a revalidação

Console

  1. No Console do Google Cloud, acesse a página Balanceamento de carga.

    Acessar a página "Balanceamento de carga"

  2. Clique no nome do balanceador de carga HTTP(S) externo.
  3. Clique em Editar .
  4. Em Configuração de back-end, selecione um back-end e clique em Editar .
  5. Verifique se a opção Ativar o Cloud CDN está selecionada.
  6. Na parte inferior da janela, clique em Configurações avançadas.
  7. Em Veicular enquanto estiver desatualizado, selecione uma das seguintes opções:
    • 1 minuto
    • 5 minutos
    • 10 minutos
    • 30 minutos
    • 1 dia (recomendado)
    • 7 dias
  8. Clique em Atualizar.
  9. Clique em Atualizar novamente.

gcloud

Para buckets de back-end, use o comando gcloud compute backend-buckets create ou gcloud compute backend-buckets update com a sinalização --serve-while-stale.

Para serviços de back-end, use o comando gcloud compute backend-services create ou gcloud compute backend-services update com a sinalização --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

Exemplo:

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

API

Para buckets de back-end, use a chamada de API Method: backendBuckets.insert ou Method: backendBuckets.update.

Para serviços de back-end, use a chamada de API Method: backendServices.insert ou Method: backendServices.update.

Use uma das seguintes chamadas de 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

Adicione o seguinte snippet ao corpo da solicitação JSON:

"cdnPolicy": {
  "serveWhileStale": SECONDS
}

Como desativar a exibição de conteúdo desatualizado

Console

  1. No Console do Google Cloud, acesse a página Balanceamento de carga.

    Acessar a página "Balanceamento de carga"

  2. Clique no nome do balanceador de carga HTTP(S) externo.
  3. Clique em Editar .
  4. Em Configuração de back-end, selecione um back-end e clique em Editar .
  5. Certifique-se de que Ativar Cloud CDN não esteja selecionado.
  6. Na parte inferior da janela, clique em Configurações avançadas.
  7. Em Exibir enquanto estiver desatualizado, selecione Desativar a exibição enquanto estiver desatualizado.
  8. Clique em Atualizar.
  9. Clique em Atualizar novamente.

gcloud

Para buckets de back-end, use o comando gcloud compute backend-buckets create ou gcloud compute backend-buckets update com o valor da sinalização --serve-while-stale definido como 0.

Para serviços de back-end, use o comando gcloud compute backend-services create ou gcloud compute backend-services update com o valor da sinalização --serve-while-stale definido como 0.

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

API

Para buckets de back-end, use a chamada de API Method: backendBuckets.insert ou Method: backendBuckets.update.

Para serviços de back-end, use a chamada de API Method: backendServices.insert ou Method: backendServices.update.

Use uma das seguintes chamadas de 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

Adicione o snippet a seguir ao corpo da solicitação JSON:

"cdnPolicy": {
  "serveWhileStale": 0
}