Fornecer arquivos compactados - Amazon CloudFront

Fornecer arquivos compactados

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.

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.

Como configurar o CloudFront para compactar objetos (console)
  1. Faça login no console do CloudFront.

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

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

  4. Use uma política de cache para especificar as configurações de armazenamento em cache e habilite os formatos Gzip e Brotli.

  5. Em Configurações de TTL na política de cache, atribua um valor maior que zero. Se você definir o valor Minimum TTL como zero, o CloudFront não armazenará em cache o conteúdo compactado.

Observações
  • Você deve utilizar políticas de cache para usar a compressão Brotli. O Brotli não permite configurações de cache legadas.

  • Para habilitar a compactação usando o AWS CloudFormation ou a API do CloudFront, 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

  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.

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

  3. 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. 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á as etapas restantes. O CloudFront não compacta o objeto novamente.

  5. 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 Quando o CloudFront compacta objetos.

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

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

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.

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.

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.

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

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

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