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 alterar a duração do cache de todos os arquivos com o mesmo padrão de caminho, você pode alterar as configurações do CloudFront para Minimum TTL (TTL mínimo), Maximum TTL (TTL máximo) e Default TTL (TTL padrão) para um comportamento de cache. Para obter informações sobre configurações individuais, consulte TTL mínimo, TTL máximo e TTL padrão em Referência de configurações da distribuição.
-
Para alterar a duração do cache de um arquivo individual, é possível configurar a origem para adicionar um cabeçalho
Cache-Control
com a diretivamax-age
ous-maxage
, ou um cabeçalhoExpires
ao arquivo. Para ter mais informações, consulte Usar cabeçalhos para controlar a duração do cache para objetos individuais.
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 ter mais informações, consulte Como o CloudFront processa códigos de status HTTP 4xx e 5xx da origem.
Tópicos
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
eCache-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
nota
O CloudFront fornecerá o conteúdo obsoleto até o valor da diretiva
stale-while-revalidate
ou o valor de TTL máximo do CloudFront, o que for menor. -
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
O CloudFront fornecerá o conteúdo obsoleto até o valor da diretiva
stale-if-error
ou o valor de TTL máximo do CloudFront, o que for menor.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 destale-if-error
. Se o conteúdo obsoleto não estiver disponível ou o conteúdo estiver além da duração destale-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
estale-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
ouExpires
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 |
Armazenamento em cache do CloudFront O CloudFront armazena objetos em cache pelo valor da diretiva Armazenamento em cache no navegador Os navegadores armazenam em cache o objeto para o valor da diretiva |
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
Armazenamento em cache no navegador Os navegadores armazenam em cache o objeto para o valor da diretiva |
A origem não adiciona uma |
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 |
Armazenamento em cache do CloudFront O CloudFront armazena objetos em cache pelo valor da diretiva Armazenamento em cache no navegador Os navegadores armazenam em cache o objeto para o valor da diretiva |
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
Armazenamento em cache no navegador Os navegadores armazenam em cache o objeto para o valor da diretiva |
A origem adiciona um cabeçalho |
Armazenamento em cache do CloudFront O CloudFront armazena o objeto até a data no cabeçalho Armazenamento em cache no navegador Os navegadores armazenam o objeto em cache até a data no cabeçalho |
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
Armazenamento em cache no navegador Os navegadores armazenam o objeto em cache até a data e hora no |
A origem adiciona as diretivas |
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
Faça login no AWS Management Console e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/
. -
Na lista de buckets, escolha o nome do bucket que contém os arquivos nos quais você está adicionando cabeçalhos.
-
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.
-
Escolha Actions (Ações), em seguida, Edit metadata (Editar metadados).
-
No painel Add metadata (Adicionar metadados), faça o seguinte:
-
Escolha Add Metadata (Adicionar metadados).
-
Em Type (Tipo), escolha System Defined (Definido pelo sistema).
-
Em Key (Chave), escolha o nome do cabeçalho que você está adicionando (Cache-Control ou Expires).
-
Em Value (Valor), insira um valor de cabeçalho. Por exemplo, para um cabeçalho
Cache-Control
, você pode inserirmax-age=86400
. EmExpires
, você pode inserir uma data de expiração e hora, comoWed, 30 Jun 2021 09:28:00 GMT
.
-
-
Na parte inferior da página, escolha Edit metadata (Editar metadados).