Fornecer arquivos compactados
Será possível usar o CloudFront para compactar automaticamente determinados tipos de objetos (arquivos) e fornecer os objetos compactados quando os visualizadores (navegadores da Web ou outros clientes) forem compatíveis com eles. Os visualizadores indicam sua compatibilidade com esses objetos compactados com o cabeçalho HTTP Accept-Encoding
.
O CloudFront pode compactar objetos usando os formatos de compactação Gzip e Brotli. Quando o visualizador é compatível com os dois formatos e ambos estão presentes no servidor de cache acessado, o CloudFront prefere o Brotli. Se somente um formato de compactação estiver presente no servidor de cache, o CloudFront o retornará.
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 que use a compactação Gzip, o objeto estiver armazenado em cache 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.
nota
Os navegadores da Web Chrome e Firefox são compatíveis com a compactação Brotli somente quando a solicitação é enviada usando HTTPS. Esses navegadores não são compatíveis com o Brotli com solicitações HTTP.
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. Especialmente em arquivos JavaScript e CSS, downloads mais rápidos podem resultar em uma renderização de páginas da Web mais rápida para seus usuários. Além disso, como o custo da transferência de dados do CloudFront é baseado na quantidade total de dados fornecidos, o fornecimento de objetos compactados pode ser mais barato que fornecê-los não compactados.
Algumas origens personalizadas também podem compactar objetos. A origem pode ser capaz de compactar objetos que o CloudFront não compacta (consulte Tipos de arquivos compactados pelo CloudFront). Se a origem retornar um arquivo compactado ao CloudFront, o CloudFront detectará que o objeto está compactado com base na presença do cabeçalho Content-Encoding
e não compactará o objeto novamente.
Configurar o CloudFront para compactar objetos
Para configurar o CloudFront para compactar objetos, atualize o comportamento de cache ao qual você quer fornecer os objetos compactados realizando todas estas etapas:
-
Verifique se a configuração Compress objects automatically (Compactar objetos automaticamente) está marcada com Yes (Sim). (No AWS CloudFormation ou na API do CloudFront, defina
Compress
comotrue
.) -
Use uma política de cache para especificar configurações de armazenamento em cache e verifique se as configurações Gzip e Brotli estão habilitadas. (No AWS CloudFormation ou na API do CloudFront, defina
EnableAcceptEncodingGzip
eEnableAcceptEncodingBrotli
comotrue
.) -
Certifique-se de que os valores TTL na política de cache estão definidos para um valor maior que zero. Ao definir os valores de TTL como zero, o armazenamento em cache do conteúdo compactado é desabilitado.
Para atualizar um comportamento de cache, é possível usar qualquer uma das seguintes ferramentas:
Como a compactação do CloudFront funciona
Ao configurar o CloudFront para compactar objetos (consulte a seção anterior), é assim que ele funciona:
-
Um visualizador solicita um objeto. O visualizador inclui o cabeçalho HTTP
Accept-Encoding
na solicitação, e o valor de cabeçalho incluigzip
,br
ou ambos. Isso indica que o visualizador é compatível com os objetos compactados. Quando o visualizador for compatível tanto com o Gzip quanto com o Brotli, o CloudFront preferirá o Brotli.nota
Os navegadores da Web Chrome e Firefox são compatíveis com a compactação Brotli somente quando a solicitação é enviada usando HTTPS. Esses navegadores não são compatíveis com o Brotli com solicitações HTTP.
-
No local da borda, o CloudFront verifica se o cache tem uma cópia compactada do objeto solicitado.
-
Se o objeto compactado já estiver no cache, o CloudFront o enviará para o visualizador e ignorará as etapas restantes.
Se o objeto compactado não estiver no cache, o CloudFront encaminhará a solicitação para a 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. 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.
-
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á a etapa restante. O CloudFront não compacta o objeto novamente.Se a origem retornar um objeto descompactado para o CloudFront (não há cabeçalho
Content-Encoding
na resposta HTTP), o CloudFront determinará se é possível compactar o objeto. Para obter mais informações sobre como o CloudFront determina se é possível compactar um objeto, consulte a seção a seguir. -
Se for possível compactar o objeto, o CloudFront o compactará, o retornará para o visualizador e o adicionará ao cache. (Em casos raros, o CloudFront pode ignorar a compactação e enviar o objeto não compactado ao visualizador.)
Quando o CloudFront compacta objetos
A lista a seguir fornece mais informações sobre quando o CloudFront 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. - Cabeçalho da solicitação
Accept-Encoding
-
Se o cabeçalho
Accept-Encoding
estiver ausente da solicitação do visualizador ou se ele não contivergzip
oubr
como valor, o CloudFront não compactará o objeto na resposta. Se o cabeçalhoAccept-Encoding
incluir valores adicionais, comodeflate
, o CloudFront os removerá antes de encaminhar a solicitação à origem.Quando o CloudFront estiver configurado para compactar objetos, ele incluirá o cabeçalho
Accept-Encoding
na chave de cache e nas solicitações de origem automaticamente. - Conteúdo dinâmico
-
O CloudFront nem sempre compacta conteúdo dinâmico. Às vezes, as respostas para conteúdo dinâmico são compactadas, outras vezes, não.
- 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 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, ou seja, o local da borda já tem a versão mais recente do arquivo. 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.
- 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
, que indica que o objeto já está compactado. Quando a resposta de uma origem incluir o cabeçalhoContent-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 dos tipos de arquivos compactados pelo CloudFront, consulte Tipos de arquivos compactados pelo CloudFront.
- 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çalhoContent-Length
esteja ausente, contenha um valor inválido ou contenha um valor fora do intervalo de tamanhos compactados pelo CloudFront, o CloudFront não compactará o objeto. - Código de status HTTP da resposta
-
O CloudFront compacta objetos somente quando o código de status HTTP da resposta é
200
,403
ou404
. - 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 ter mais informações, consulte Conversão do cabeçalho ETag. - 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. 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
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
Conversão do cabeçalho ETag
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 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
(cabeçalho HTTP ETag
) -
Validação fraca
(solicitações condicionais HTTP)