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

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

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

Você pode controlar por quanto tempo seus arquivos permanecem em um CloudFront cache antes de CloudFront encaminhar outra solicitação para sua 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, CloudFront serve um arquivo de um ponto de borda até que a duração do cache que você especificou passe, ou seja, até que o arquivo expire. Depois de expirar, na próxima vez que a localização de borda receber uma solicitação para o arquivo, CloudFront encaminhe a solicitação para a origem para 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 CloudFront cache já tiver a versão mais recente, a origem retornará um código de status304 Not Modified.

  • Se o CloudFront cache 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, CloudFront pode despejar o arquivo — remover o arquivo antes da data de expiração — para liberar espaço para arquivos que foram 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 Especificando a quantidade de tempo que armazena objetos em CloudFront cache.

Você também pode controlar por quanto tempo os erros (por exemplo,404 Not Found) permanecem em um CloudFront cache antes de CloudFront tentar novamente obter o objeto solicitado encaminhando outra solicitação para sua origem. Para ter mais informações, consulte Como CloudFront processa e armazena em cache os códigos de status HTTP 4xx e 5xx de sua 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 Cache-Control max-age diretiva permite especificar por quanto tempo (em segundos) você deseja que um objeto permaneça no cache antes de CloudFront obter o objeto novamente do servidor de origem. O tempo mínimo de expiração CloudFront suportado é de 0 segundos. O valor máximo é de 100 anos. Especifique o valor no seguinte formato:

    Cache-Control: max-age=segundos

    Por exemplo, a diretiva a seguir diz CloudFront para manter o objeto associado no cache por 3600 segundos (uma hora):

    Cache-Control: max-age=3600

    Se você quiser que os objetos permaneçam nos caches de CloudFront borda por um período diferente do que permanecem nos caches do navegador, você pode usar as Cache-Control s-maxage diretivas Cache-Control max-age e em conjunto. Para ter mais informações, consulte Especificando a quantidade de tempo que armazena objetos em CloudFront 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 Expires, o CloudFront usará somente o valor de Cache-Control max-age.

Para ter mais informações, consulte Especificando a quantidade de tempo que armazena objetos em CloudFront cache.

Você não pode usar os campos HTTP Cache-Control ou de Pragma cabeçalho em uma GET solicitação de um visualizador CloudFront para forçar o retorno do objeto ao servidor de origem. CloudFront ignora esses campos de cabeçalho nas 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:

Fornecimento de conteúdo obsoleto (expirado)

CloudFront suporta as diretivas de controle Stale-While-Revalidate e de Stale-If-Error cache.

  • A stale-while-revalidate diretiva CloudFront permite veicular 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 pontos de presença CloudFront da, 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, armazena em CloudFront cache a resposta por uma hora (max-age=3600). Se uma solicitação for feita após esse período, veicula CloudFront o conteúdo obsoleto e, ao mesmo tempo, envia 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 stale-if-error diretiva CloudFront permite veicular conteúdo obsoleto do cache se a origem estiver inacessível ou retornar um código de erro 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, armazena em CloudFront cache a resposta por uma hora (max-age=3600). Se a origem estiver inativa ou retornar um erro após esse período, 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 ambas as respostas de erro stale-if-error e as personalizadas são configuradas, CloudFront primeiro tentará veicular o conteúdo obsoleto se um erro for encontrado dentro da stale-if-error duração especificada. Se o conteúdo obsoleto não estiver disponível ou se o conteúdo estiver além da stale-if-error duração, CloudFront veiculará as respostas de erro personalizadas configuradas para o código de status de erro correspondente.

Uso dos 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, armazena em CloudFront cache a resposta por uma hora (max-age=3600). Se uma solicitação for feita após esse período, CloudFront veicule 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 ao CloudFront tentar revalidar o conteúdo, CloudFront continuará veiculando 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.

Especificando a quantidade de tempo que armazena objetos em CloudFront cache

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

  • Defina os valores mínimo, máximo e padrão de TTL no comportamento do cache de uma CloudFront distribuição. 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 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

CloudFront armazenamento em cache

CloudFront armazena o objeto em cache pelo menor valor da Cache-Control: max-age diretiva ou pelo valor do TTL CloudFront máximo.

Armazenamento em cache no navegador

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

CloudFront armazenamento em cache

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

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

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

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

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

CloudFront armazenamento em cache

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

Armazenamento em cache no navegador

Depende do navegador.

CloudFront armazenamento em cache

CloudFront armazena o objeto em cache pelo maior valor do TTL CloudFront mínimo ou TTL padrão.

Armazenamento em cache no navegador

Depende do navegador.

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

CloudFront armazenamento em cache

CloudFront armazena o objeto em cache pelo menor valor da Cache-Control: s-maxage diretiva ou pelo valor do TTL CloudFront máximo.

Armazenamento em cache no navegador

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

CloudFront armazenamento em cache

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

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

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

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

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

CloudFront armazenamento em cache

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

Armazenamento em cache no navegador

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

CloudFront armazenamento em cache

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

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

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

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

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

CloudFront e os navegadores respeitam os cabeçalhos.

CloudFront armazenamento em cache

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

Armazenamento em cache no navegador

Os navegadores respeitam os cabeçalhos.

Atenção

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

Se a origem for alcançável, CloudFront obtém o objeto da origem e o retorna ao visualizador.

Se a origem estiver inacessível e o valor mínimo ou máximo de TTL for maior que 0, CloudFront servirá ao objeto que obteve da origem anteriormente.

Para evitar esse comportamento, inclua a Cache-Control: stale-if-error=0 diretiva com o objeto retornado da origem. Isso faz CloudFront com que retorne um erro em resposta a futuras solicitações se a origem estiver inacessível, em vez de retornar o objeto que ele obteve da origem anteriormente.

Para obter informações sobre como alterar as configurações das distribuições usando o CloudFront console, consulteAtualizar uma distribuição. Para obter informações sobre como alterar as configurações das distribuições usando a CloudFront API, 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).