

# Fornecer arquivos compactados
<a name="ServingCompressedFiles"></a>

Quando os objetos solicitados são compactados, os downloads podem ficar mais rápidos, porque os objetos são menores, chegando a menos de um quarto do tamanho do original em alguns casos. Downloads mais rápidos podem aumentar a velocidade de renderização de páginas da web para os visualizadores, especialmente para arquivos JavaScript e CSS. Além disso, o custo da transferência de dados do CloudFront é baseado na quantidade total de dados fornecidos. Pode ser mais barato fornecer objetos compactados do que sem compactação.

**Topics**
+ [

## Configurar o CloudFront para compactar objetos
](#compressed-content-cloudfront-configuring)
+ [

## Como a compactação do CloudFront funciona
](#compressed-content-cloudfront-how-it-works)
+ [

## Condições para compressão
](#compressed-content-cloudfront-notes)
+ [

## Tipos de arquivos compactados pelo CloudFront
](#compressed-content-cloudfront-file-types)
+ [

## `ETag`Conversão do cabeçalho
](#compressed-content-cloudfront-etag-header)

## Configurar o CloudFront para compactar objetos
<a name="compressed-content-cloudfront-configuring"></a>

Para configurar o CloudFront para compactar objetos, atualize o comportamento de cache ao qual você quer fornecer os objetos compactados.

**Como configurar o CloudFront para compactar objetos (console)**

1. Faça login no [console do CloudFront](https://console.aws.amazon.com/cloudfront/v4/home).

1. Escolha sua distribuição e selecione o **comportamento** a ser editado.

1. Na configuração **Compactar objetos manualmente**, escolha **Sim**. 

1. Use uma [política de cache](controlling-the-cache-key.md) para especificar as configurações de armazenamento em cache e habilite os formatos **Gzip** e **Brotli**.

**Observações**  
Você deve utilizar [políticas de cache](controlling-the-cache-key.md) para usar a compressão Brotli. O Brotli não permite configurações de cache legadas.
Para habilitar a compactação usando o [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html) ou a API do [CloudFront](https://docs.aws.amazon.com/cloudfront/latest/APIReference/Welcome.html), defina os parâmetros `Compress`, `EnableAcceptEncodingGzip` e `EnableAcceptEncodingBrotli` como `true`.

Para entender como o CloudFront compacta objetos, consulte a seção a seguir.

## Como a compactação do CloudFront funciona
<a name="compressed-content-cloudfront-how-it-works"></a>

1. Um visualizador solicita um objeto. O visualizador inclui o cabeçalho HTTP `Accept-Encoding` na solicitação, e o valor de cabeçalho inclui `gzip`, `br` ou ambos. Isso indica que o visualizador é compatível com os objetos compactados. Quando o visualizador for compatível tanto com Gzip quanto com Brotli, o CloudFront preferirá o Brotli.
**nota**  
Os navegadores da web Chrome e Firefox permitem a compactação Brotli somente quando a solicitação é enviada por HTTPS. Eles não são compatíveis com Brotli em solicitações HTTP.

1. No local da borda, o CloudFront verifica se o cache tem uma cópia compactada do objeto solicitado.

1. Dependendo se o objeto compactado está ou não no cache, o CloudFront faz uma das seguintes ações:
   + Se o objeto compactado já estiver no cache, o CloudFront o enviará ao visualizador e ignorará as etapas restantes.
   + Se o objeto compactado não estiver no cache, o CloudFront encaminhará a solicitação à origem.
**nota**  
Se uma cópia descompactada do objeto já estiver no cache, o CloudFront poderá enviá-la para o visualizador sem encaminhar a solicitação para a origem. Por exemplo, isso pode acontecer quando o CloudFront [ignorou a compactação anteriormente](#compression-skipped). Quando isso acontece, o CloudFront armazena em cache o objeto não compactado e continua a fornecê-lo até o objeto expirar, ser despejado ou ser invalidado.

1. Se a origem retornar um objeto compactado (conforme indicado pela presença de um cabeçalho `Content-Encoding` na resposta HTTP), o CloudFront enviará o objeto compactado ao visualizador, o adicionará ao cache e ignorará as etapas restantes. O CloudFront não compacta o objeto novamente.

1. Se a origem retornar um objeto descompactado ao CloudFront sem o cabeçalho `Content-Encoding` na resposta HTTP, o CloudFront determinará se é possível compactar o objeto. Para obter mais informações, consulte [Condições para compressão](#compressed-content-cloudfront-notes).

1. Se for possível compactar o objeto, o CloudFront o compactará, o enviará ao visualizador e o adicionará ao cache. 

1. Se houver solicitações subsequentes do visualizador para o mesmo objeto, o CloudFront exibirá a primeira versão armazenada em cache. Por exemplo, se um visualizador solicitar um objeto específico armazenado em cache que use a compactação Gzip e o visualizador *aceitar* o formato Gzip, as solicitações subsequentes para o mesmo objeto sempre exibirão a versão Gzip, mesmo que o visualizador aceite Brotli e Gzip.

Algumas origens personalizadas também podem compactar objetos. A origem pode conseguir compactar objetos que o CloudFront não compacta. Para obter mais informações, consulte [Tipos de arquivos compactados pelo CloudFront](#compressed-content-cloudfront-file-types).

## Condições para compressão
<a name="compressed-content-cloudfront-notes"></a>

A lista a seguir fornece mais informações sobre os cenários no qual o CloudFront não compacta objetos.

**A solicitação usa HTTP 1.0**  
Se uma solicitação ao CloudFront usar HTTP 1.0, o CloudFront removerá o cabeçalho `Accept-Encoding` e não compactará o objeto na resposta.

**`Accept-Encoding`Cabeçalho da solicitação **  
Se o cabeçalho `Accept-Encoding` estiver ausente da solicitação do visualizador ou se ele não contiver `gzip` ou `br` como valor, o CloudFront não compactará o objeto na resposta. Se o cabeçalho `Accept-Encoding` incluir valores adicionais, como `deflate`, o CloudFront os removerá antes de encaminhar a solicitação à origem.  
Quando o CloudFront estiver [configurado para compactar objetos](#compressed-content-cloudfront-configuring), ele incluirá o cabeçalho `Accept-Encoding` na chave de cache e nas solicitações de origem automaticamente.

**Quando você configura o CloudFront para compactar objetos, o conteúdo já é armazenado em cache**  
O CloudFront compacta objetos quando os obtém da origem. Ao configurar o CloudFront para compactar objetos, o CloudFront não compactará objetos que já estejam armazenados em cache em locais da borda. Além disso, quando um objeto armazenado em cache expira em um local da borda e o CloudFront encaminha outra solicitação do objeto à origem, o CloudFront não compactará o arquivo se a origem retornar um código de status HTTP 304. Isso significa que o local da borda já tem a versão mais recente do objeto. Para que o CloudFront compacte os objetos que já estão em locais da borda, é necessário invalidar os objetos. Para obter mais informações, consulte [Invalidar arquivos para remover conteúdo](Invalidation.md).

**A origem já está configurada para compactar objetos**  
Se você configurar o CloudFront para compactar objetos e a origem também compactar os objetos, a origem deverá incluir um cabeçalho `Content-Encoding`. Esse cabeçalho indica ao CloudFront que o objeto já está compactado. Quando a resposta de uma origem incluir o cabeçalho `Content-Encoding`, o CloudFront não compactará o objeto, qualquer que seja valor do cabeçalho. O CloudFront envia a resposta ao visualizador e armazena o objeto em cache no local da borda.

**Tipos de arquivos compactados pelo CloudFront**  
Para obter uma lista completa, consulte [Tipos de arquivos compactados pelo CloudFront](#compressed-content-cloudfront-file-types).

**Tamanho dos objetos compactados pelo CloudFront**  
O CloudFront compacta objetos de 1.000 bytes a 10.000.000 bytes.

**`Content-Length`Cabeçalho **  
A origem deve incluir um cabeçalho `Content-Length` na reposta, que o CloudFront usa para determinar se o tamanho do objeto está no intervalo de compactação do CloudFront. Caso o cabeçalho `Content-Length` esteja ausente, contenha um valor inválido ou um valor fora do intervalo de tamanhos compactados pelo CloudFront, o CloudFront não compactará o objeto. Consulte mais informações sobre como o CloudFront processa objetos grandes que podem exceder a faixa de tamanho em [Como o CloudFront processa solicitações parciais de um objeto (Range GETs)](RangeGETs.md).

**Código de status HTTP da resposta**  
O CloudFront compacta objetos somente quando o código de status HTTP da resposta é `200`, `403` ou `404`.

**A resposta não tem corpo**  
Quando a resposta HTTP da origem não tiver corpo, não haverá nada para o CloudFront compactar.

**`ETag`Cabeçalho **  
O CloudFront às vezes modifica o cabeçalho `ETag` na resposta HTTP ao compactar objetos. Para obter mais informações, consulte [`ETag`Conversão do cabeçalho](#compressed-content-cloudfront-etag-header).

**O CloudFront ignora a compactação**  
O CloudFront compacta objetos na base do melhor esforço. Em casos raros, o CloudFront ignora a compactação de um objeto quando enfrenta uma alta carga de tráfego. O CloudFront toma essa decisão com base em vários fatores, incluindo a capacidade do host. Se o CloudFront ignorar a compactação de um objeto, ele armazenará o objeto não compactado em cache e continuará a fornecê-lo aos visualizadores até o objeto expirar, ser despejado ou ser invalidado.

## Tipos de arquivos compactados pelo CloudFront
<a name="compressed-content-cloudfront-file-types"></a>

Se você configurar o CloudFront para compactar objetos, o CloudFront compactará os objetos que tiverem os seguintes valores no cabeçalho de resposta `Content-Type`:
+ `application/dash+xml`
+ `application/eot`
+ `application/font`
+ `application/font-sfnt`
+ `application/javascript`
+ `application/json`
+ `application/opentype`
+ `application/otf`
+ `application/pdf`
+ `application/pkcs7-mime`
+ `application/protobuf`
+ `application/rss+xml`
+ `application/truetype`
+ `application/ttf`
+ `application/vnd.apple.mpegurl`
+ `application/vnd.mapbox-vector-tile`
+ `application/vnd.ms-fontobject`
+ `application/wasm`
+ `application/xhtml+xml`
+ `application/xml`
+ `application/x-font-opentype`
+ `application/x-font-truetype`
+ `application/x-font-ttf`
+ `application/x-httpd-cgi`
+ `application/x-javascript`
+ `application/x-mpegurl`
+ `application/x-opentype`
+ `application/x-otf`
+ `application/x-perl`
+ `application/x-ttf`
+ `font/eot`
+ `font/opentype`
+ `font/otf`
+ `font/ttf`
+ `image/svg+xml`
+ `text/css`
+ `text/csv`
+ `text/html`
+ `text/javascript`
+ `text/js`
+ `text/plain`
+ `text/richtext`
+ `text/tab-separated-values`
+ `text/xml`
+ `text/x-component`
+ `text/x-java-source`
+ `text/x-script`
+ `vnd.apple.mpegurl`

## `ETag`Conversão do cabeçalho
<a name="compressed-content-cloudfront-etag-header"></a>

Quando o objeto não compactado da origem inclui um cabeçalho HTTP `ETag` válido e forte, e o CloudFront compacta o objeto, o CloudFront também converte o valor forte do cabeçalho `ETag` em um `ETag` fraco e retorna o valor fraco de `ETag` ao visualizador. Os visualizadores podem armazenar o valor fraco de `ETag` e usá-lo para enviar solicitações condicionais com o cabeçalho HTTP `If-None-Match`. Isso permite que os visualizadores, o CloudFront e a origem tratem as versões compactadas e não compactadas de um objeto como semanticamente equivalentes, o que reduz a transferência de dados desnecessária.

Um valor de cabeçalho `ETag` válido e forte começa e termina com um caractere de aspas duplas (`"`). Para converter o valor forte de `ETag` em um valor fraco, o CloudFront adiciona os caracteres `W/` ao início do valor forte de `ETag`.

Quando o objeto da origem inclui um valor de cabeçalho `ETag` fraco (um valor que começa com os caracteres `W/`), o CloudFront não modifica esse valor e o retorna ao visualizador como o recebeu da origem.

Quando o objeto da origem inclui um valor de cabeçalho `ETag` inválido (o valor não começa com `"` ou com `W/`), o CloudFront remove o cabeçalho `ETag` e retorna o objeto ao visualizador sem o cabeçalho de resposta `ETag`.

Para mais informações, consulte as páginas nos documentos do MDN na Web:
+ [Políticas](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag#Directives) (cabeçalho HTTP `ETag`)
+ [Validação fraca](https://developer.mozilla.org/en-US/docs/Web/HTTP/Conditional_requests#Weak_validation) (solicitações condicionais HTTP)
+ [If-None-Match Cabeçalho HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match)