Gerenciar o tempo de permanência do conteúdo no cache (expiração) - Amazon CloudFront

Gerenciar o tempo de permanência do conteúdo no cache (expiração)

É possível controlar o tempo de permanência dos arquivos em um cache do CloudFront antes de o CloudFront encaminhar outra solicitação para a origem. A diminuição da duração permite fornecer conteúdo dinâmico. O aumento da duração significa que os usuários obtêm melhor desempenho, pois é mais provável que seus arquivos sejam fornecidos diretamente do cache de borda. Uma duração maior também reduz a carga na origem.

Normalmente, o CloudFront fornece um arquivo de um ponto de presença até passar a duração do cache especificada, ou seja, até o arquivo expirar. Após expirar, na próxima vez que o ponto de presença receber uma solicitação do usuário para o arquivo, o CloudFront encaminhará a solicitação para o servidor de origem a fim de verificar se o cache contém a versão mais recente do arquivo. A resposta da origem depende se o arquivo foi alterado ou não:

  • Se o cache do CloudFront já tiver a versão mais recente, a origem retornará um código de status 304 Not Modified.

  • Se o cache do CloudFront não tiver a versão mais recente, a origem retornará um código de status 200 OK e a versão mais recente do arquivo.

Se um arquivo em um ponto de presença não for solicitado com frequência, o CloudFront poderá exclui-lo (removê-lo antes da data de expiração) para criar espaço para os arquivos solicitados mais recentemente.

Por padrão, cada arquivo expira automaticamente após 24 horas, mas você pode alterar o comportamento padrão de duas formas:

Para obter mais informações sobre como Minimum TTL (TTL mínimo), Default TTL (TTL padrão) e Maximum TTL (TTL máximo) interagem com as diretivas Cache-Control max-age e Cache-Control s-maxage e o campo de cabeçalho Expires, consulte Como especificar por quanto tempo o CloudFront armazena os objetos em cache.

Você também pode controlar o tempo de permanência de erros (por exemplo, 404, Not Found) em um cache do CloudFront antes de o CloudFront tentar obter novamente o objeto solicitado encaminhando outra solicitação para a origem. Para obter mais informações, consulte Como o CloudFront processa e armazena em cache códigos de status HTTP 4xx e 5xx da origem.

Usar cabeçalhos para controlar a duração do cache para objetos individuais

Você pode usar os cabeçalhos Cache-Control e Expires para controlar o tempo de permanência dos objetos no cache. As configurações de Minimum TTL, Default TTL e Maximum TTL também afetam a duração do cache, mas esta é uma visão geral de como os cabeçalhos podem afetar a duração do cache:

  • A diretiva Cache-Control max-age permite especificar o tempo de permanência (em segundos) de um objeto no cache antes de o CloudFront obtê-lo novamente do servidor de origem. O tempo mínimo de expiração é compatível com o CloudFront é de 0 segundos. O valor máximo é de 100 anos. Especifique o valor no seguinte formato:

    Cache-Control: max-age=segundos

    Por exemplo, a seguinte diretiva solicita que o CloudFront mantenha o objeto associado no cache por 3600 segundos (uma hora):

    Cache-Control: max-age=3600

    Para que os objetos permaneçam nos caches de borda do CloudFront por uma duração diferente da permanência nos caches do navegador, use as diretivas Cache-Control max-age e Cache-Control s-maxage em conjunto. Para obter mais informações, consulte Como especificar por quanto tempo o CloudFront armazena os objetos em cache.

  • O campo de cabeçalho Expires permite especificar uma data e hora de expiração usando o formato especificado em RFC 2616, Hypertext Transfer Protocol -- HTTP/1.1 Section 3.3.1, Full Date, por exemplo:

    Sat, 27 Jun 2015 23:59:59 GMT

Recomendamos o uso da diretiva Cache-Control max-age, em vez do campo de cabeçalho Expires, para controlar o armazenamento de objetos em cache. Se você especificar os valores de Cache-Control max-age e de Expires, o CloudFront usará somente o valor de Cache-Control max-age.

Para obter mais informações, consulte Como especificar por quanto tempo o CloudFront armazena os objetos em cache.

Não é possível usar os campos de cabeçalho HTTP Cache-Control ou Pragma em uma solicitação GET de um visualizador para forçar o CloudFront a voltar ao servidor de origem para obter o objeto. O CloudFront ignora esses campos de cabeçalho em solicitações do visualizador.

Para obter mais informações sobre os campos de cabeçalho Cache-Control e Expires, consulte as seguintes seções em RFC 2616, Hypertext Transfer Protocol -- HTTP/1.1:

Para obter um exemplo de como adicionar campos de cabeçalho Cache-Control e Expires usando o AWS SDK para PHP, consulte Fazer upload de um objeto usando um AWS SDK para PHP no Guia do desenvolvedor do Amazon Simple Storage Service. Algumas ferramentas de terceiros também conseguem adicionar esses campos.

Como especificar por quanto tempo o CloudFront armazena os objetos em cache

Para controlar a quantidade de tempo que o CloudFront mantém um objeto no cache antes de enviar outra solicitação para a origem, você pode:

  • Defina os valores TTL mínimo, máximo e padrão no comportamento de cache de uma distribuição do CloudFront. Você pode definir esses valores em uma política de cache anexada ao comportamento de cache (recomendado) ou nas configurações de cache herdadas.

  • Inclua os cabeçalhos Cache-Control ou Expires nas respostas da origem. Esses cabeçalhos também ajudam a determinar por quanto tempo um navegador mantém um objeto no cache do navegador antes de enviar outra solicitação para o CloudFront.

A tabela a seguir explica como os cabeçalhos Cache-Control e Expires enviados da origem funcionam em conjunto com as configurações de TTL em um comportamento de cache para afetar o cache.

Cabeçalhos de origem TTL mínimo = 0 segundos TTL mínimo > 0 segundo

A origem adiciona uma Cache-Control: max-age diretiva ao objeto

Armazenamento em cache do CloudFront

O CloudFront armazena objetos em cache pelo valor da diretiva Cache-Control: max-age ou pelo valor do TTL máximo do CloudFront, o que for menor.

Armazenamento em cache no navegador

Os navegadores armazenam em cache o objeto para o valor da diretiva Cache-Control: max-age.

Armazenamento em cache do CloudFront

O armazenamento em cache do CloudFront depende dos valores do TTL mínimo e do TTL máximo do CloudFront e da diretiva Cache-Control max-age:

  • Se TTL mínimo < max-age < TTL máximo, o CloudFront armazena em cache o objeto para o valor da diretiva Cache-Control: max-age.

  • Se max-age < TTL mínimo, o CloudFront armazena em cache o objeto para o valor do TTL mínimo do CloudFront.

  • Se max-age > TTL máximo, o CloudFront armazena em cache o objeto para o valor do TTL máximo do CloudFront.

Armazenamento em cache no navegador

Os navegadores armazenam em cache o objeto para o valor da diretiva Cache-Control: max-age.

A origem não adiciona uma Cache-Control: max-age diretiva ao objeto

Armazenamento em cache do CloudFront

O CloudFront armazena em cache o objeto para o valor do TTL padrão do CloudFront.

Armazenamento em cache no navegador

Depende do navegador.

Armazenamento em cache do CloudFront

O CloudFront armazena objetos em cache pelo valor do TTL máximo do CloudFront ou TLL padrão, o que for maior.

Armazenamento em cache no navegador

Depende do navegador.

A origem adiciona diretivas Cache-Control: max-age e Cache-Control: s-maxage ao objeto

Armazenamento em cache do CloudFront

O CloudFront armazena objetos em cache pelo valor da diretiva Cache-Control: s-maxage ou pelo valor do TTL máximo do CloudFront, o que for menor.

Armazenamento em cache no navegador

Os navegadores armazenam em cache o objeto para o valor da diretiva Cache-Control max-age.

Armazenamento em cache do CloudFront

O armazenamento em cache do CloudFront depende dos valores do TTL mínimo e do TTL máximo do CloudFront e da diretiva Cache-Control: s-maxage:

  • Se TTL mínimo < s-maxage < TTL máximo, o CloudFront armazena em cache o objeto para o valor da diretiva Cache-Control: s-maxage.

  • Se s-maxage < TTL mínimo, o CloudFront armazena em cache o objeto para o valor do TTL mínimo do CloudFront.

  • Se s-maxage > TTL máximo, o CloudFront armazena em cache o objeto para o valor do TTL máximo do CloudFront.

Armazenamento em cache no navegador

Os navegadores armazenam em cache o objeto para o valor da diretiva Cache-Control: max-age.

A origem adiciona um cabeçalho Expires no objeto

Armazenamento em cache do CloudFront

O CloudFront armazena o objeto até a data no cabeçalho Expires ou para o valor do TTL máximo do CloudFront, o que ocorrer antes.

Armazenamento em cache no navegador

Os navegadores armazenam o objeto em cache até a data no cabeçalho Expires.

Armazenamento em cache do CloudFront

O armazenamento em cache do CloudFront depende dos valores do TTL mínimo e máximo do CloudFront e do cabeçalho Expires:

  • Se TTL mínimo < Expires < TLL máximo, o CloudFront armazena o objeto até a data e hora no cabeçalho Expires.

  • Se Expires < TTL mínimo, o CloudFront armazena em cache o objeto para o valor do TTL mínimo do CloudFront.

  • Se Expires > TTL máximo, o CloudFront armazena em cache o objeto para o valor do TTL máximo do CloudFront.

Armazenamento em cache no navegador

Os navegadores armazenam o objeto em cache até a data e hora no Expires cabeçalho.

A origem adiciona as diretivas Cache-Control: no-cache, no-store e/ou private ao objeto

O CloudFront e os navegadores respeitam os cabeçalhos.

Para obter uma exceção à forma como o CloudFront lida com o cabeçalho Cache-Control: no-cache, consulte Solicitações simultâneas do mesmo objeto (picos de tráfego).

Armazenamento em cache do CloudFront

O CloudFront armazena em cache o objeto para o valor do TTL mínimo do CloudFront. Veja o aviso abaixo desta tabela.

Armazenamento em cache no navegador

Os navegadores respeitam os cabeçalhos.

Atenção

Se o CloudFront obtiver um objeto da origem que inclui as diretivas Cache-Control: no-cache.no-store e/ou private, e posteriormente o CloudFront receber outra solicitação de visualizador para o mesmo objeto, o CloudFront tentará entrar em contato com a origem para atender à solicitação do visualizador.

Se a origem for alcançável, o CloudFront obterá o objeto da origem e o retornará ao visualizador.

Se a origem não for alcançável e o TTL mínimo for maior que 0, o CloudFront atende ao objeto obtido da origem anteriormente. Para evitar esse comportamento, inclua a Cache-Control: stale-if-error=0 diretiva com o objeto retornado da origem. Isso faz com que o CloudFront retorne um erro em resposta a solicitações futuras se a origem não for alcançável, em vez de retornar o objeto obtido da origem anteriormente.

Para mais informações sobre como alterar as configurações de distribuições usando o console do CloudFront, consulte Atualizar uma distribuição. Para mais informações sobre como alterar as configurações de distribuições usando a API do CloudFront, consulte UpdateDistribution.

Adicionar cabeçalhos aos objetos usando o console do Amazon S3

Como adicionar um campo de cabeçalho Cache-Control ou Expires aos objetos do Amazon S3 usando o console do Amazon S3

  1. Faça login no Console de Gerenciamento da AWS e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

  2. Na lista de buckets, escolha o nome do bucket que contém os arquivos nos quais você está adicionando cabeçalhos.

  3. Marque a caixa de seleção ao lado do nome do arquivo ou pasta em que você está adicionando cabeçalhos. Quando você adiciona cabeçalhos a uma pasta, isso afeta todos os arquivos dentro dela.

  4. Escolha Actions (Ações) e, em seguida, Edit metadata (Editar metadados).

  5. No painel Add metadata (Adicionar metadados), faça o seguinte:

    1. Escolha Add Metadata (Adicionar metadados).

    2. Em Type (Tipo), escolha System Defined (Definido pelo sistema).

    3. Em Key (Chave), escolha o nome do cabeçalho que você está adicionando (Cache-Control ou Expires).

    4. Em Value (Valor), insira um valor de cabeçalho. Por exemplo, para um cabeçalho Cache-Control, você pode inserir max-age=86400. Em Expires, você pode inserir uma data de expiração e hora, como Wed, 30 Jun 2021 09:28:00 GMT.

  6. Na parte inferior da página, escolha Edit metadata (Editar metadados).