Usar armazenamento em cache negativo

Nesta página, fornecemos instruções para usar o armazenamento em cache negativo com o Cloud CDN. O armazenamento em cache negativo permite que você defina um TTL diferente para cada código de status.

O motivo disso é aplicar um controle refinado sobre o armazenamento em cache para erros ou redirecionamentos comuns. Isso diminui a latência da resposta, o que possibilita reduzir a carga na origem e melhorar a experiência do usuário final.

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
    

Códigos de status e TTLs padrão

O armazenamento em cache negativo se aplica a códigos de status específicos, que estão listados na tabela a seguir.

O Cloud CDN aplica os seguintes TTLs padrão a esses códigos de status:

Código de status Significado TTL
HTTP 300 Múltipla escolha 10 minutos
HTTP 301 e 308 Redirecionamentos permanentes 10 minutos
HTTP 302 e 307 Redirecionamentos temporários Não são armazenadas em cache por padrão
HTTP 404 Não encontrada 120 segundos
HTTP 405 Método não encontrado 60 segundos
HTTP 410 Desaparecido 120 segundos
HTTP 451 Indisponível por motivos legais 120 segundos
HTTP 501 Não implementado 60 segundos

É possível modificar esses valores padrão usando o armazenamento em cache negativo para definir um TTL de cache para o código de status HTTP especificado.

Como configurar o armazenamento em cache negativo

O armazenamento em cache negativo permite que você configure seu serviço para armazenar falhas no cache, além de sucessos. Isso permite que o Cloud CDN proteja as origens de solicitações que geram erros (como 404 Not Found) da mesma forma que protege as origens de solicitações que geram respostas bem-sucedidas.

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 seu balanceador de carga de aplicativo 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. Clique em Ativar armazenamento em cache negativo.
  8. Clique em Adicionar política de armazenamento em cache negativo.
    1. Insira um código de status HTTP.
    2. Selecione um Cache time to live (TTL).
  9. Clique em Atualizar.
  10. Clique em Atualizar novamente.

gcloud

Nos buckets de back-end, use o comando gcloud compute backend-buckets create ou gcloud compute backend-buckets update com a sinalização --negative-caching.

Nos serviços de back-end, use o comando gcloud compute backend-services create ou gcloud compute backend-services update com a sinalização --negative-caching.

gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --negative-caching
gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --negative-caching

Para ativar o armazenamento em cache negativo de apenas duas respostas de erro específicas, por exemplo, defina respostas com o código de status 404 para serem armazenadas em cache por 60 segundos, e as respostas com o código de status 405 para serem armazenadas em cache por 120 segundos.

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --negative-caching \
    --cache-mode=CACHE_ALL_STATIC \
    --default-ttl=86400 \
    --negative-caching-policy='404=60,405=120'

api

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

Nos 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": {
  "negativeCaching": ON,
  "negativeCachingPolicy": [
    {
      "code": STATUS_CODE,
      "ttl": TTL_SECONDS
    }
  ]
}

O armazenamento em cache negativo precisa estar ativado para definir as configurações de negativeCachingPolicy. Se você omitir a política e tiver negativeCaching ativado, o Cloud CDN usará os valores padrão listados em Códigos de status e TTLs padrão.

Ao especificar uma política de armazenamento em cache negativo, especifique um TTL de cache para todos os códigos de resposta que você quer armazenar em cache. O Cloud CDN não aplica nenhum cache negativo padrão quando há uma política.

Para STATUS_CODE, é possível especificar os seguintes códigos de status HTTP:

  • 300, 301, 302, 307, 308
  • 404, 405, 410, 421, 451
  • 501

Para cada código de status, é possível especificar alguns segundos para armazenar as respostas em cache. Para desativar o armazenamento em cache negativo do código de status, exclua o código da sua política de armazenamento em cache negativo.

O valor máximo permitido é de 1.800 segundos (30 minutos); No entanto, objetos acessados com pouca frequência podem ser removidos do cache antes do TTL definido.

Quando o modo de cache é definido como CACHE_ALL_STATIC ou USE_ORIGIN_HEADERS, o armazenamento em cache negativo é aplicado a respostas com o código de resposta especificado que sem cabeçalhos Cache-Control ou Expires.

Quando o modo de cache é definido como FORCE_CACHE_ALL, o armazenamento em cache negativo substitui qualquer cabeçalho de armazenamento em cache definido pela origem, e o Cloud CDN armazena em cache a resposta pelo período de tempo especificado pelo TTL ou não armazena em cache de nenhuma forma se nenhum TTL estiver definido.

Além disso, quando o modo de cache é definido como FORCE_CACHE_ALL, o Cloud CDN também modifica o max-age enviado ao cliente no cabeçalho Cache-Control. Em particular, se um determinado erro tiver uma configuração de TTL definida, o Cloud CDN vai usar menos essa definição de TTL e a configuração client_ttl e vai enviar um cabeçalho Cache-Control: public,max-age=N com esse valor. Se um determinado erro não tiver uma configuração de TTL definida, o Cloud CDN vai remover qualquer cabeçalho Cache-Control enviado pela origem. O Cloud CDN também sempre remove todos os cabeçalhos Expires enviados pela origem.

Se uma origem tem o armazenamento em cache negativo inicialmente ativado, mas depois desativado ( manualmente ou desativando o armazenamento em cache para um determinado código de resposta), erro armazenado em cache respostas são consideradas válidas apenas com base no Cache-Control ou Expires e cabeçalhos de cache válidos. Portanto, depois que o armazenamento em cache negativo é desativado, uma resposta sem diretivas de idade de armazenamento em cache nos cabeçalhos não é mostrada do cache.

O Cloud CDN armazena em cache as respostas a solicitações GET. Para mais informações, consulte Conteúdo armazenável em cache.

Cada entrada de cache é identificada por uma chave de cache.

Como desativar o armazenamento em cache negativo

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 seu balanceador de carga de aplicativo 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. Desmarque a caixa de seleção ao lado de Ativar armazenamento em cache negativo.
  8. Clique em Atualizar.
  9. Clique em Atualizar novamente.

gcloud

Nos buckets de back-end, use o comando gcloud compute backend-buckets create ou gcloud compute backend-buckets update com a sinalização --no-negative-caching.

Nos serviços de back-end, use o comando gcloud compute backend-services create ou gcloud compute backend-services update com a sinalização --no-negative-caching.

gcloud compute backend-services (create | update) (BACKEND_SERVICE_NAME | BACKEND_BUCKET_NAME)
    --no-negative-caching

api

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

Nos 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": {
  "negativeCaching": OFF
}