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 performance, 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. Depois de expirar, na próxima vez em que o local da borda receber uma solicitação para o arquivo, o CloudFront encaminhará a solicitação à 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 max-age e s-maxage e o campo de cabeçalho Expires, consulte 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 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 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 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:

Fornecer conteúdo obsoleto (expirado)

O CloudFront oferece suporte às diretivas de controle de cache Stale-While-Revalidate e Stale-If-Error.

  • A diretiva stale-while-revalidate permite que o CloudFront forneça conteúdo obsoleto do cache enquanto busca de forma assíncrona uma nova versão da origem. Isso melhora a latência, pois os usuários recebem respostas imediatamente dos locais de borda do CloudFront, sem precisar esperar pela busca em segundo plano, e novos conteúdos são carregados em segundo plano para futuras solicitações.

    No exemplo a seguir, o CloudFront armazena a resposta em cache por uma hora (max-age=3600). Se uma solicitação for feita após esse período, o CloudFront fornecerá o conteúdo obsoleto e, ao mesmo tempo, enviará uma solicitação à origem para revalidar e atualizar o conteúdo em cache. O conteúdo obsoleto é exibido por até 10 minutos (stale-while-revalidate=600) enquanto o conteúdo está sendo revalidado.

    Cache-Control: max-age=3600, stale-while-revalidate=600
  • A diretiva stale-if-error permite que o CloudFront forneça conteúdo obsoleto do cache se a origem estiver inacessível ou retornar o código de erro que esteja entre 500 e 600. Isso garante que os visualizadores possam acessar o conteúdo mesmo durante uma interrupção na origem.

    No exemplo a seguir, o CloudFront armazena a resposta em cache por uma hora (max-age=3600). Se a origem estiver inativa ou retornar um erro após esse período, o CloudFront continuará veiculando o conteúdo obsoleto por até 24 horas (stale-if-error=86400).

    Cache-Control: max-age=3600, stale-if-error=86400
    nota

    Quando as respostas de erro stale-if-error e personalizadas estiverem configuradas, o CloudFront primeiro tentará fornecer o conteúdo obsoleto se um erro for encontrado dentro da duração especificada de stale-if-error. Se o conteúdo obsoleto não estiver disponível ou o conteúdo estiver além da duração de stale-if-error, o CloudFront exibirá as respostas de erro personalizadas configuradas para o código de status de erro correspondente.

Usar os dois juntos

stale-while-revalidate e stale-if-error são diretivas independentes de controle de cache que podem ser usadas juntas para reduzir a latência e adicionar um buffer para que sua origem responda ou se recupere.

No exemplo a seguir, o CloudFront armazena a resposta em cache por uma hora (max-age=3600). Se uma solicitação for feita após esse período, o CloudFront exibirá o conteúdo obsoleto por até 10 minutos (stale-while-revalidate=600) enquanto o conteúdo está sendo revalidado. Se o servidor de origem retornar um erro enquanto o CloudFront tenta revalidar o conteúdo, o CloudFront continuará servindo o conteúdo obsoleto por até 24 horas (stale-if-error=86400).

Cache-Control: max-age=3600, stale-while-revalidate=600, stale-if-error=86400
dica

O armazenamento em cache é um equilíbrio entre desempenho e atualização. Usar diretivas como stale-while-revalidate e stale-if-error pode melhorar o desempenho e a experiência do usuário, mas certifique-se de que as configurações estejam alinhadas com a atualização do seu conteúdo. As diretivas de conteúdo obsoletas são mais adequadas para casos de uso em que o conteúdo precisa ser atualizado, mas ter a versão mais recente não é essencial. Além disso, se seu conteúdo não mudar ou raramente mudar, o stale-while-revalidate poderá adicionar solicitações de rede desnecessárias. Em vez disso, considere definir uma longa duração de cache.

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 de 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 TTL mínimo > 0

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.

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 seu TTL mínimo for maior que 0, o CloudFront usa o TTL mínimo da política de cache, mesmo que as diretivas Cache-Control: no-cache, no-store e/ou private estejam presentes nos cabeçalhos de origem.

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

Se a origem estiver inacessível e o valor do TTL mínimo ou máximo for maior que 0, o CloudFront atenderá 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 AWS Management Console 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), 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).