Esta página fornece informações sobre como disponibilizar conteúdo desatualizado e expirado com o Cloud CDN. A disponibilização de conteúdo desatualizado permite que o cache global do Google continue disponibilizar 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 disponibilizar conteúdo desatualizado para os usuários em vez de retornar erros aos usuários.
- A disponibilizaçã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 disponibiliza 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
em seguida disponibilizará 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 favor com a
configuração cdnPolicy.serveWhileStale
. Essa configuração determina quanto tempo, após a expiração da
resposta, o Cloud CDN pode continuar a disponibilizar uma versão
desatualizada. Se isso não for especificado 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 disponibilizaçã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 é disponibilizado até o limite especificado após o prazo de validade da entrada
no cache, que é definido pelo cabeçalhos
max-age
, s-maxage
e Expires
. Para mais informações, consulte Prazos de validade e solicitações de
validação.
Se um armazenamento em cache de borda do Cloud CDN não tiver uma cópia armazenada em cache do objeto para disponibilizar conteúdo 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.
Geração de registros e user agent
As solicitações assíncronas feitas pelo Cloud CDN aparecem para o servidor
de origem exatamente como as solicitações de revalidação normais que ocorrem quando não é disponibilizado conteúdo
desatualizado. 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 disponibilizado 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 de forma não condicional. 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 ao especificar uma diretiva de
controle de cache max-stale
. Se especificado, essa diretiva controla o tempo de
inatividade que o cliente tolera.
Se o conteúdo armazenado em cache for mais antigo do que o valor de max-stale
do cliente,
o Cloud CDN revalidará o conteúdo antes de disponibilizá-lo.
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 durante a revalidação
Console
- No console do Google Cloud , acesse a página Balanceamento de carga.
- Clique no nome do 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 do CDN, selecione uma das seguintes opções
para Disponibilizar durante a inatividade:
- 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
com a 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 disponibilização de conteúdo desatualizado
Console
- No console do Google Cloud , acesse a página Balanceamento de carga.
- Clique no nome do 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 o Cloud CDN não esteja selecionado.
- Na parte inferior da janela, clique em Configurações avançadas.
- Em Opções adicionais do CDN > Disponibilizar durante a inatividade, selecione Desativar a veiculação durante a inatividade .
- 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 seguinte snippet ao corpo da solicitação JSON:
"cdnPolicy": { "serveWhileStale": 0 }