Altere as definições e as substituições de TTL

Esta página descreve como alterar as substituições de TTL com a CDN da Google Cloud. As substituições de TTL dão-lhe um controlo detalhado sobre o tempo durante o qual a CDN da nuvem armazena em cache o seu conteúdo antes de o revalidar.

As definições de TTL estão resumidas na tabela seguinte.

  TTL predefinido TTL máximo TTL do cliente
Motivo para configurar Melhore as taxas de acerto da cache para conteúdo que não se altera com frequência Forçar a RFC na nuvem a revalidar o conteúdo com mais frequência do que o especificado por um cabeçalho de origem Forçar os clientes a revalidarem o conteúdo com mais frequência em relação à RFC na nuvem
Usado quando Uma das seguintes afirmações é verdadeira para uma resposta bem-sucedida:
  • cache mode = FORCE_CACHE_ALL
  • cache mode = CACHE_ALL_STATIC, o content-type é estaticamente colocável em cache e não é definido um TTL pelos cabeçalhos de origem (max-age, s-maxage ou Expires)
Todas as seguintes situações são verdadeiras:
  • cache mode = CACHE_ALL_STATIC
  • O TTL é definido pelos cabeçalhos de origem (max-age, s-maxage ou Expires)
  • O TTL especificado no cabeçalho de origem é superior ao valor máximo de TTL
Uma das seguintes afirmações é verdadeira:
  • cache mode = FORCE_CACHE_ALL e o valor TTL do cliente é inferior ao TTL do Cloud CDN
  • cache mode = CACHE_ALL_STATIC e o TTL do cliente for inferior ao TTL definido pelo cabeçalho de origem (ou o TTL predefinido se não estiverem presentes informações do cabeçalho de origem)
Valor predefinido 3600 segundos (1 hora) 86 400 segundos (1 dia) 3600 segundos (1 hora)
Valor máximo permitido 31 622 400 segundos (1 ano) 31 622 400 segundos (1 ano) 31 622 400 segundos (1 ano)
Notas Tem de ser igual ou inferior ao TTL máximo

--default-ttl=0
força a revalidação da resposta na origem
Tem de ser inferior ou igual ao TTL máximo

Antes de começar

  • Leia sobre os modos de cache.

  • Certifique-se de que o Cloud CDN está ativado. Para obter instruções, consulte o artigo Usar o Cloud CDN.

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

    gcloud components update
    

Defina o TTL predefinido

Para melhorar as taxas de acertos da cache para conteúdo que não muda com frequência, pode substituir o TTL predefinido para que a CDN da Google revalide o conteúdo na origem com menos frequência. Tenha em atenção que os objetos acedidos com pouca frequência podem ser removidos da cache antes do TTL definido.

Quando o modo de cache é FORCE_CACHE_ALL, o TTL predefinido substitui o TTL definido em todas as respostas (incluindo as que têm um TTL definido por cabeçalhos de origem). Neste modo, o TTL predefinido é visível para os clientes, porque o Cloud CDN define os atributos public e max-age das respostas fornecidas aos clientes.

Para o modo CACHE_ALL_STATIC, o TTL predefinido aplica-se ao conteúdo em cache publicado por uma origem para respostas que não tenham um TTL válido existente (cabeçalho max-age, s-maxage ou Expires). No modo CACHE_ALL_STATIC, o TTL predefinido não modifica o cabeçalho Cache-Control publicado para os clientes. Para modificar o cabeçalho Cache-Control no modo CACHE_ALL_STATIC, tem de definir o TTL do cliente.

Quando define o modo de cache para usar cabeçalhos de origem (USE_ORIGIN_HEADERS), o valor TTL predefinido não se aplica e não pode ser definido porque o Cloud CDN usa a diretiva de origem max-age ou s-maxage ou o cabeçalho Expires em alternativa.

Consola

  1. Na Google Cloud consola, aceda à página Equilíbrio de carga.

    Aceda a Balanceamento de carga

  2. Clique no nome do seu Application Load Balancer 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 a opção Ativar RFC está selecionada.
  6. Certifique-se de que o modo de cache é Conteúdo estático da cache (recomendado) ou Forçar a colocação em cache de todo o conteúdo. A substituição dos valores de TTL não é suportada quando o modo de cache é Usar definições de origem com base nos cabeçalhos Cache-Control.
  7. Em Tempo de vida predefinido, selecione um valor.
  8. Clique em Guardar.

gcloud

Para serviços de back-end, use o comando gcloud compute backend-services create ou gcloud compute backend-services update com a flag --default-ttl.

Para buckets de back-end, use o comando gcloud compute backend-buckets create ou gcloud compute backend-buckets update com a flag --default-ttl.

gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --default-ttl=DEFAULT_TTL
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --default-ttl=DEFAULT_TTL

Substitua DEFAULT_TTL por um valor até 31 622 400 segundos (1 ano).

API

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

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

Use uma das seguintes chamadas da 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 fragmento ao corpo do pedido JSON:

"cdnPolicy": {
  "defaultTtl": DEFAULT_TTL
}

Substitua DEFAULT_TTL por um valor até 31 622 400 segundos (1 ano).

Defina o TTL máximo

O TTL máximo especifica o TTL máximo permitido na RFC para conteúdo em cache publicado por uma origem.

O TTL de uma resposta é limitado pelo TTL máximo se uma das seguintes afirmações for verdadeira:

  • A resposta tenta definir um max-age ou um s-maxage superior ao valor máximo de TTL.
  • A resposta tem um cabeçalho Expires com mais de cdnPolicy.maxTtl segundos no futuro.

A definição de TTL máximo não altera o valor max-age enviado para o cliente. Para mais informações, consulte o artigo Substituir o TTL máximo do cliente. A definição de TTL máximo afeta apenas o tempo durante o qual a RFC na nuvem tenta colocar o conteúdo em cache.

Esta definição só é usada quando o modo de cache é CACHE_ALL_STATIC. O valor máximo permitido é de 31 622 400 segundos (1 ano). Tenha em atenção que os objetos acedidos com pouca frequência podem ser removidos da cache antes do TTL definido.

Com FORCE_CACHE_ALL, o TTL está sempre definido para o TTL predefinido. Não pode definir um TTL máximo.

Consola

  1. Na Google Cloud consola, aceda à página Equilíbrio de carga.

    Aceda a Balanceamento de carga

  2. Clique no nome do seu Application Load Balancer 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 a opção Ativar RFC está selecionada.
  6. Certifique-se de que o modo de cache é Conteúdo estático da cache (recomendado).
  7. Em Tempo máximo de vida, selecione um valor.
  8. Clique em Guardar.

gcloud

Para serviços de back-end, use o comando gcloud compute backend-services create ou gcloud compute backend-services update com a flag --max-ttl.

Para buckets de back-end, use o comando gcloud compute backend-buckets create ou gcloud compute backend-buckets update com a flag --max-ttl.

gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --max-ttl=MAX_TTL
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --max-ttl=MAX_TTL

Substitua MAX_TTL por um valor até 31 622 400 segundos (1 ano).

API

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

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

Use uma das seguintes chamadas da 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 fragmento ao corpo do pedido JSON:

"cdnPolicy": {
  "maxTtl": MAX_TTL
}

Substitua MAX_TTL por um valor até 31 622 400 segundos (1 ano).

Substitua o TTL do cliente

Para todos os modos de cache, o Cloud CDN transmite os cabeçalhos Cache-Control ao cliente.

O TTL do cliente permite-lhe definir um TTL máximo para o que é enviado para navegadores ou clientes para que os clientes validem novamente o conteúdo em relação à Cloud CDN com mais frequência, sem exigir a revalidação na origem. Desta forma, o conteúdo pode ser invalidado no RFC quando necessário, e os navegadores podem descobrir que o conteúdo foi invalidado assim que o TTL do cliente expirar.

No modo FORCE_CACHE_ALL, o Cloud CDN passa normalmente o mesmo max-age ao cliente que usa internamente para o armazenamento em cache de proxy. No entanto, se for especificado um TTL do cliente e for um valor inferior, o TTL do cliente é passado ao cliente na diretiva max-age. Da mesma forma, no modo CACHE_ALL_STATIC, o TTL do cliente serve como um limite para o que quer que seja que max-age seja especificado pelo servidor de origem, para que o max-age enviado para o navegador ou o cliente não seja superior ao TTL do cliente configurado. Se a origem não especificar nenhum max-age, é usado o menor dos valores de TTL do Cloud CDN e do TTL do cliente como o max-age enviado para o navegador ou o cliente.

Se um cabeçalho Expires estiver presente na resposta de origem, é removido e substituído por uma diretiva Cache-Control: max-age com o TTL adequado. Para respostas de erro, se não estiver definido nenhum TTL de colocação em cache negativo, o cabeçalho Cache-Control também é removido.

Uma vez que o TTL do cliente é tratado como um valor máximo para o que é enviado para navegadores ou clientes, não pode ser usado para aumentar o valor max-age que seria enviado de outra forma. Se o valor max-age enviado para os navegadores e os clientes for inferior ao pretendido, tem de aumentar o valor da diretiva max-age na resposta devolvida pela origem ou ajustar as definições de TTL predefinido ou armazenamento em cache negativo adequadamente.

Normalmente, uma definição de TTL do cliente de cerca de um dia é um bom limite superior prático. Uma definição de um dia significa que os navegadores comunicam com essa frequência, no mínimo, e podem saber mais sobre as invalidações da cache que possam ter ocorrido na CDN da Cloud. Pode definir o TTL do cliente como muito superior (até um ano) como forma de permitir que a origem e os TTLs configurados controlem totalmente o que é enviado ao cliente. Isto pode ser útil se não quiser que o navegador faça validações mais frequentes em relação à Cloud CDN.

Consola

  1. Na Google Cloud consola, aceda à página Equilíbrio de carga.

    Aceda a Balanceamento de carga

  2. Clique no nome do seu Application Load Balancer 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 a opção Ativar RFC está selecionada.
  6. Certifique-se de que o modo de cache é Conteúdo estático da cache (recomendado) ou Forçar a colocação em cache de todo o conteúdo. A substituição dos valores de TTL não é suportada quando o modo de cache é Usar definições de origem com base nos cabeçalhos Cache-Control.
  7. Em Tempo de vida do cliente, selecione um valor até 1 ano.
  8. Clique em Guardar.

gcloud

Para serviços de back-end, use o comando gcloud compute backend-services create ou gcloud compute backend-services update com a flag --client-ttl.

Para buckets de back-end, use o comando gcloud compute backend-buckets create ou gcloud compute backend-buckets update com a flag --client-ttl.

gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --client-ttl=CLIENT_TTL
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --client-ttl=CLIENT_TTL

Substitua CLIENT_TTL por um valor até 31 622 400 segundos (1 ano).

API

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

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

Use uma das seguintes chamadas da 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 fragmento ao corpo do pedido JSON:

"cdnPolicy": {
  "clientTtl": CLIENT_TTL
}

Substitua CLIENT_TTL por um valor até 31 622 400 segundos (1 ano).

O que se segue?