Fornecer arquivos compactados - Amazon CloudFront

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:

  1. 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 como true.)

  2. 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 e EnableAcceptEncodingBrotli como true.)

  3. 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 cache é desabilitado e o CloudFront não compacta os objetos.

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:

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

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

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

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

  5. 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 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, 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ç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 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-LengthCabeç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 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 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.

ETagCabeçalho

O CloudFront às vezes modifica o cabeçalho ETag na resposta HTTP ao compactar objetos. Para obter 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: