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-maxage
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
Exibir conteúdo desatualizado ao revalidar
Console
- No Console do Google Cloud, acesse a página Balanceamento de carga.
- Clique no nome do seu balanceador de carga de aplicativo externo.
- Clique em Editar.
- Em Configuração de back-end, selecione um back-end e clique em Editar.
- Verifique se a opção Ativar o Cloud CDN está selecionada.
- Na parte inferior da janela, clique em Configurações avançadas.
- Em Opções adicionais da CDN, selecione uma das seguintes opções
para Exibir enquanto estiver desatualizado:
- 1 minuto
- 5 minutos
- 10 minutos
- 30 minutos
- 1 dia (recomendado)
- 7 dias
- Clique em Atualizar.
- Clique em Atualizar novamente.
gcloud
Para buckets de back-end, use o comando gcloud compute backend-buckets
create
ou
o comando gcloud compute backend-buckets
update
pela sinalização --serve-while-stale
.
Para serviços de back-end, use o comando gcloud compute backend-services
create
ou
o comando 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 }
Desativar a veiculação de conteúdo desatualizado
Console
- No Console do Google Cloud, acesse a página Balanceamento de carga.
- Clique no nome do seu balanceador de carga de aplicativo externo.
- Clique em Editar.
- Em Configuração de back-end, selecione um back-end e clique em Editar.
- Certifique-se de que Ativar Cloud CDN não esteja selecionado.
- Na parte inferior da janela, clique em Configurações avançadas.
- Em Opções adicionais da CDN > Veicular durante a inatividade, selecione Desativar a veiculação enquanto estiver desatualizado.
- Clique em Atualizar.
- 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
o comando 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 }