

# Gerenciar o tempo de permanência do conteúdo no cache (expiração)
<a name="Expiration"></a>

É 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.

Recomendamos gerenciar a duração do cache atualizando a política de cache da sua distribuição. Se você optar por não usar uma política de cache, a vida útil (TTL) padrão será de 24 horas, mas você poderá atualizar as seguintes configurações para substituir o padrão:
+ 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 mais informações sobre configurações individuais, consulte [Minimum TTL](DownloadDistValuesCacheBehavior.md#DownloadDistValuesMinTTL), [Maximum TTL](DownloadDistValuesCacheBehavior.md#DownloadDistValuesMaxTTL) e [TTL padrão](DownloadDistValuesCacheBehavior.md#DownloadDistValuesDefaultTTL).
+ 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 diretiva `max-age` ou `s-maxage`, ou um cabeçalho `Expires` ao arquivo. Para obter mais informações, consulte [Usar cabeçalhos para controlar a duração do cache para objetos individuais](#expiration-individual-objects).

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](#ExpirationDownloadDist).

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](HTTPStatusCodes.md).

**Topics**
+ [Usar cabeçalhos para controlar a duração do cache para objetos individuais](#expiration-individual-objects)
+ [Fornecer conteúdo obsoleto (expirado)](#stale-content)
+ [Especificar por quanto tempo o CloudFront armazena os objetos em cache](#ExpirationDownloadDist)
+ [Adicionar cabeçalhos aos objetos usando o console do Amazon S3](#ExpirationAddingHeadersInS3)

## Usar cabeçalhos para controlar a duração do cache para objetos individuais
<a name="expiration-individual-objects"></a>

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](#ExpirationDownloadDist).
+ 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](https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1), 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](#ExpirationDownloadDist).

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*: 
+ [Section 14.9 Cache Control](https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9)
+ [Section 14.21 Expires](https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21)

## Fornecer conteúdo obsoleto (expirado)
<a name="stale-content"></a>

O CloudFront oferece suporte às diretivas de controle de cache `Stale-While-Revalidate` e `Stale-If-Error`. É possível usar essas diretivas para especificar por quanto tempo o conteúdo obsoleto fica disponível para os espectadores.

**Topics**
+ [`Stale-While-Revalidate`](#stale-while-revalidate)
+ [`Stale-If-Error`](#stale-if-error-only)
+ [Usar ambas as diretivas](#use-both-stale-directives)

### `Stale-While-Revalidate`
<a name="stale-while-revalidate"></a>

Essa diretiva 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 à medida que os visualizadores recebem respostas imediatamente de locais da borda sem precisar esperar a obtenção do segundo plano. O conteúdo novo é carregado em segundo plano para futuras solicitações.

**Example Exemplo: `Stale-While-Revalidate`**  
O CloudFront faz o seguinte quando você define o cabeçalho `Cache-Control` para usar essas diretivas.   

```
Cache-Control: max-age=3600, stale-while-revalidate=600
```

1. O CloudFront armazenará a resposta em cache por uma hora (`max-age=3600`).

1. Se uma solicitação for feita após essa duração, 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. 

1. Enquanto o conteúdo é revalidado, o CloudFront fornece o conteúdo obsoleto por até 10 minutos (`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](DownloadDistValuesCacheBehavior.md#DownloadDistValuesMaxTTL) do CloudFront, o que for menor. Após a duração máxima de TTL, o objeto obsoleto não estará disponível no cache de borda, independentemente do valor de `stale-while-revalidate`. 

### `Stale-If-Error`
<a name="stale-if-error-only"></a>

Essa diretiva 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.

**Example Exemplo: `Stale-If-Error`**  
O CloudFront faz o seguinte quando você define o cabeçalho `Cache-Control` para usar essas diretivas.   

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

1. O CloudFront armazena a resposta em cache por uma hora (`max-age=3600`).

1. Se a origem estiver inativa ou retornar um erro após essa duração, o CloudFront continuará fornecendo o conteúdo obsoleto por até 24 horas (`stale-if-error=86400`).

1. Se você tiver configurado respostas de erro personalizadas, o CloudFront tentará fornecer o conteúdo obsoleto caso seja encontrado um erro na duração de `stale-if-error` especificada. Se o conteúdo obsoleto estiver indisponível, o CloudFront fornecerá as respostas de erro personalizadas que você configurou para o código de status de erro correspondente. Para obter mais informações, consulte [Gerar respostas a erros personalizadas](GeneratingCustomErrorResponses.md).

**Observações**  
O CloudFront fornecerá o conteúdo obsoleto até o valor da diretiva `stale-if-error` ou o valor de [TTL máximo](DownloadDistValuesCacheBehavior.md#DownloadDistValuesMaxTTL) do CloudFront, o que for menor. Após a duração máxima de TTL, o objeto obsoleto não estará disponível no cache de borda, independentemente do valor de `stale-if-error`. 
Se você não configurar `stale-if-error` ou personalizar respostas de erro, o CloudFront retornará o objeto obsoleto ou encaminhará a resposta de erro de volta ao visualizador, dependendo se o objeto solicitado está no cache da borda ou não. Para obter mais informações, consulte [Como o CloudFront processará erros se você não tiver configurado páginas de erro personalizadas](HTTPStatusCodes.md#HTTPStatusCodes-no-custom-error-pages).

### Usar ambas as diretivas
<a name="use-both-stale-directives"></a>

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

**Example Exemplo: uso de ambas as diretivas**  
O CloudFront faz o seguinte quando você define o cabeçalho `Cache-Control` para usar as diretivas a seguir.   

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

1. O CloudFront armazena a resposta em cache por uma hora (`max-age=3600`). 

1. Se uma solicitação for feita após essa duração, o CloudFront exibirá o conteúdo obsoleto por até 10 minutos (`stale-while-revalidate=600`) enquanto o conteúdo está sendo revalidado. 

1. Se o servidor de origem retornar um erro enquanto o CloudFront tenta revalidar o conteúdo, o CloudFront continuará fornecendo o conteúdo obsoleto por até 24 horas (`stale-if-error=86400`).

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
<a name="ExpirationDownloadDist"></a>

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](controlling-the-cache-key.md) 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`: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AmazonCloudFront/latest/DeveloperGuide/Expiration.html) **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`: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AmazonCloudFront/latest/DeveloperGuide/Expiration.html) **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`: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AmazonCloudFront/latest/DeveloperGuide/Expiration.html) **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](#stale-if-error). **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.
O CloudFront não armazena em cache o código de status HTTP 501 (não implementado) de uma origem do S3 quando os cabeçalhos de origem incluem as diretivas `Cache-Control: no-cache`, `no-store` e/ou `private`. Esse é o comportamento padrão para uma origem do S3, mesmo que sua configuração de [TTL mínimo](DownloadDistValuesCacheBehavior.md#DownloadDistValuesMinTTL) seja maior que 0.

Para mais informações sobre como alterar as configurações de distribuições usando o console do CloudFront, consulte [Atualizar uma distribuição](HowToUpdateDistribution.md). Para mais informações sobre como alterar as configurações de distribuições usando a API do CloudFront, consulte [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html).

## Adicionar cabeçalhos aos objetos usando o console do Amazon S3
<a name="ExpirationAddingHeadersInS3"></a>

Você pode adicionar o campo de cabeçalho `Cache-Control` ou `Expires` aos objetos do Amazon S3. Para fazer isso, modifique os campos de metadados do objeto.

**Como adicionar um campo de cabeçalho `Cache-Control` ou `Expires` aos objetos do Amazon S3**

1. Siga o procedimento na seção **Substituir metadados definidos pelo sistema** no tópico [Editar metadados de objetos no console do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-object-metadata.html) no *Guia do usuário do Amazon S3*.

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

1. 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`.

1. Siga o restante do procedimento para salvar as alterações de metadados.