Controlar a chave de cache - Amazon CloudFront

Controlar a chave de cache

Com o Amazon CloudFront, é possível controlar a chave de cache para objetos armazenados em cache em pontos de presença do CloudFront. A chave de cache é o identificador exclusivo de cada objeto no cache e define se a solicitação de um visualizador gera um acerto do cache. Um acerto de cache ocorre quando uma solicitação de visualizador gera a mesma chave de cache de uma solicitação anterior, e o objeto dessa chave de cache está no cache do local da borda e é válido. Quando há um acerto de cache, o objeto é fornecido ao visualizador de um local da borda do CloudFront, o que inclui os seguintes benefícios:

  • Carga reduzida no servidor de origem

  • Latência reduzida para o visualizador

É possível obter melhor performance do site ou da aplicação quando você tem uma taxa de acertos de cache maior (uma proporção maior de solicitações do visualizador resulta em um acerto de cache). Uma maneira de melhorar a taxa de acertos do cache é incluir apenas os valores mínimos necessários na chave de cache. Para obter mais informações, consulte Noções básicas sobre a chave de cache.

Para controlar a chave de cache, use uma política de cache do CloudFront. Anexe uma política de cache para um ou mais comportamentos de cache em uma distribuição do CloudFront.

Criar políticas de cache

É possível usar uma política de cache para melhorar a taxa de acertos do cache controlando os valores (strings de consulta de URL, cabeçalhos HTTP e cookies) incluídos na chave de cache. Você pode criar uma política de cache no console do CloudFront com a AWS Command Line Interface (AWS CLI) ou a API do CloudFront.

Depois de criar uma política de cache, anexe-a a um ou mais comportamentos de cache em uma distribuição do CloudFront.

Console
Como criar uma política de cache (console)
  1. Faça login no AWS Management Console e abra a página Policies (Políticas) no console do CloudFront em https://console.aws.amazon.com/cloudfront/v3/home?#/policies.

  2. Escolha Create cache policy (Criar política de cache).

  3. Escolha a configuração desejada para esta política de cache. Para obter mais informações, consulte Noções básicas sobre políticas de cache.

  4. Quando terminar, escolha Create (Criar).

Depois de criar uma política de cache, é possível anexá-la a um comportamento de cache.

Como anexar uma política de cache a uma distribuição existente (console)
  1. Abra a página Distributions (Distribuições) no console do CloudFront em https://console.aws.amazon.com/cloudfront/v3/home#/distributions.

  2. Escolha a distribuição a ser atualizada e escolha a guia Behaviors (Comportamentos).

  3. Escolha o comportamento de cache a ser atualizado e escolha Edit (Editar).

    Ou, para criar um novo comportamento de cache, escolha Create behavior (Criar comportamento).

  4. Na seção Cache key and origin requests (Solicitações da chave de cache e de origem), verifique se a opção Cache policy and origin request policy (Política de cache e política de solicitação de origem) está selecionada.

  5. Em Cache policy (Política de cache), escolha a política de cache a ser anexada a esse comportamento de cache.

  6. Na parte inferior da página, escolha Save changes (Salvar alterações).

Como anexar uma política de cache a uma nova distribuição (console)
  1. Abra o console do CloudFront em https://console.aws.amazon.com/cloudfront/v3/home.

  2. Escolha Create distribution (Criar distribuição).

  3. Na seção Cache key and origin requests (Solicitações da chave de cache e de origem), verifique se a opção Cache policy and origin request policy (Política de cache e política de solicitação de origem) está selecionada.

  4. Em Cache policy (Política de cache), escolha a política de cache a ser anexada ao comportamento de cache padrão dessa distribuição.

  5. Escolha as configurações desejadas para a origem, o comportamento padrão do cache e outras configurações de distribuição. Para obter mais informações, consulte Valores especificados ao criar ou atualizar uma distribuição.

  6. Ao concluir, escolha Create distribution (Criar distribuição).

CLI

Para criar uma política de cache com a AWS Command Line Interface (AWS CLI), use o comando aws cloudfront create-cache-policy. É possível usar um arquivo de entrada para fornecer os parâmetros de entrada do comando, em vez de especificar cada parâmetro individual como entrada na linha de comando.

Como criar uma política de cache (CLI com arquivo de entrada)
  1. Use o comando a seguir para criar um arquivo chamado cache-policy.yaml que contém todos os parâmetros de entrada para o comando create-cache-policy.

    aws cloudfront create-cache-policy --generate-cli-skeleton yaml-input > cache-policy.yaml
  2. Abra o arquivo chamado cache-policy.yaml que você acabou de criar. Edite o arquivo para especificar as configurações de política de cache desejadas e salve o arquivo. É possível remover campos opcionais do arquivo, mas não remover os campos obrigatórios.

    Para obter mais informações sobre as configurações de política de cache, consulte Noções básicas sobre políticas de cache.

  3. Use o seguinte comando para criar a política de cache usando parâmetros de entrada do arquivo cache-policy.yaml.

    aws cloudfront create-cache-policy --cli-input-yaml file://cache-policy.yaml

    Anote o valor de Id na saída do comando. Esse é o ID da política de cache que será necessário para anexar a política de cache ao comportamento de cache de uma distribuição do CloudFront.

Como anexar uma política de cache a uma distribuição existente (CLI com arquivo de entrada)
  1. Use o comando a seguir para salvar a configuração da distribuição do CloudFront que você deseja atualizar. Substitua distribution_ID pelo ID da distribuição.

    aws cloudfront get-distribution-config --id distribution_ID --output yaml > dist-config.yaml
  2. Abra o arquivo chamado dist-config.yaml que você acabou de criar. Edite o arquivo, fazendo as seguintes alterações em cada comportamento de cache que você está atualizando para usar uma política de cache.

    • No comportamento de cache, adicione um campo chamado CachePolicyId. Para o valor do campo, use o ID da política de cache que você anotou depois de criar a política.

    • Remova os campos MinTTL, MaxTTL, DefaultTTL e ForwardedValues do comportamento de cache. Essas configurações são especificadas na política de cache, portanto você não pode incluir esses campos e uma política de cache no mesmo comportamento de cache.

    • Renomeie o campo ETag para IfMatch, mas não altere o valor do campo.

    Ao concluir, salve o arquivo.

  3. Use o comando a seguir para atualizar a distribuição para utilizar a política de cache. Substitua distribution_ID pelo ID da distribuição.

    aws cloudfront update-distribution --id distribution_ID --cli-input-yaml file://dist-config.yaml
Como anexar uma política de cache a uma nova distribuição (CLI com arquivo de entrada)
  1. Use o comando a seguir para criar um arquivo chamado distribution.yaml que contém todos os parâmetros de entrada para o comando create-distribution.

    aws cloudfront create-distribution --generate-cli-skeleton yaml-input > distribution.yaml
  2. Abra o arquivo chamado distribution.yaml que você acabou de criar. No comportamento de cache padrão, no campo CachePolicyId, insira o ID da política de cache que você anotou após criar a política. Continue editando o arquivo para especificar as configurações de distribuição desejadas e salve o arquivo ao concluir.

    Para obter mais informações sobre as configurações de distribuição, consulte Valores especificados ao criar ou atualizar uma distribuição.

  3. Use o seguinte comando para criar a distribuição usando parâmetros de entrada do arquivo distribution.yaml.

    aws cloudfront create-distribution --cli-input-yaml file://distribution.yaml
API

Para criar uma política de cache com a API do CloudFront, use CreateCachePolicy. Para obter mais informações sobre os campos especificados nessa chamada de API, consulte Noções básicas sobre políticas de cache e a documentação de referência de API do seu SDK da AWS ou de outro cliente de API.

Depois de criar uma política de cache, é possível anexá-la a um comportamento de cache, usando uma das seguintes chamadas de API:

  • Para anexá-la a um comportamento de cache em uma distribuição existente, use UpdateDistribution.

  • Para anexá-la a um comportamento de cache em uma nova distribuição, use CreateDistribution.

Para as duas chamadas de API, forneça o ID da política de cache no campo CachePolicyId, dentro de um comportamento de cache. Para mais informações sobre os outros campos especificados nessas chamadas de API, consulte Valores especificados ao criar ou atualizar uma distribuição e a documentação de referência da API do AWS SDK ou de outro cliente de API.

Noções básicas sobre políticas de cache

É possível usar uma política de cache para melhorar a taxa de acertos do cache controlando os valores (strings de consulta de URL, cabeçalhos HTTP e cookies) incluídos na chave de cache. O CloudFront fornece algumas políticas de cache predefinidas, conhecidas como políticas gerenciadas, para casos de uso comuns. É possível usar essas políticas gerenciadas ou criar sua própria política de cache específica para suas necessidades. Para obter mais informações sobre políticas gerenciadas, consulte Usar as políticas de cache gerenciadas.

Uma política de cache contém as seguintes configurações, que são categorizadas em informações de política, configurações de vida útil (TTL) e configurações chave de cache.

Informações de política

Nome

Um nome exclusivo para identificar a política de cache. No console, você usa o nome para anexar a política de cache a um comportamento de cache.

Descrição

Um comentário para descrever a política de cache. Isso é opcional, mas pode ajudar a identificar a finalidade da política de cache.

Configurações de vida útil (TTL)

As configurações de vida útil (TTL) funcionam em conjunto com os cabeçalhos HTTP Cache-Control e Expires (se eles estiverem na resposta da origem) para determinar por quanto tempo os objetos permanecem válidos no cache do CloudFront.

Minimum TTL

O tempo mínimo, em segundos, que você quer que os objetos permaneçam no cache do CloudFront antes que o CloudFront verifique se o objeto foi atualizado na origem. Para obter mais informações, consulte Gerenciar o tempo de permanência do conteúdo no cache (expiração).

Maximum TTL

O tempo máximo, em segundos, que os objetos permanecem no cache do CloudFront antes que o CloudFront envie outra solicitação à origem para verificar se o objeto foi atualizado. O CloudFront usa essa configuração somente quando a origem envia cabeçalhos Cache-Control ou Expires com o objeto. Para obter mais informações, consulte Gerenciar o tempo de permanência do conteúdo no cache (expiração).

TTL padrão

O tempo padrão, em segundos, que você quer que os objetos permaneçam no cache do CloudFront antes que o CloudFront verifique se o objeto foi atualizado na origem. O CloudFront usa esse valor de configuração como a TTL do objeto somente quando a origem não envia cabeçalhos Cache-Control ou Expires com o objeto. Para obter mais informações, consulte Gerenciar o tempo de permanência do conteúdo no cache (expiração).

Configurações da chave de cache

As configurações da chave de cache especificam os valores nas solicitações do visualizador que o CloudFront inclui na chave de cache. Os valores podem incluir strings de consulta de URL, cabeçalhos HTTP e cookies. Os valores que você inclui na chave de cache são automaticamente incluídos nas solicitações que o CloudFront envia à origem, conhecidas como solicitações de origem. Para obter informações sobre como controlar solicitações de origem sem afetar a chave de cache, consulte Controlar solicitações de origem.

As configurações de chave de cache incluem:

Cabeçalhos

Os cabeçalhos HTTP em solicitações do visualizador que o CloudFront inclui na chave de cache e nas solicitações da origem. Para cabeçalhos, é possível escolher uma das seguintes configurações:

  • None (Nenhum): os cabeçalhos HTTP nas solicitações do visualizador não são incluídos na chave de cache e não são incluídos automaticamente nas solicitações da origem.

  • Include the following headers (Incluir os seguintes cabeçalhos): você especifica quais dos cabeçalhos HTTP nas solicitações do visualizador serão incluídos na chave de cache e incluídos automaticamente nas solicitações da origem.

Ao usar a configuração Include the following headers (Incluir os seguintes cabeçalhos), você especifica cabeçalhos HTTP pelo nome, não pelo valor. Por exemplo, considere o seguinte cabeçalho HTTP:

Accept-Language: en-US,en;q=0.5

Nesse caso, você especifica o cabeçalho como Accept-Language, não como Accept-Language: en-US,en;q=0.5. No entanto, o CloudFront inclui o cabeçalho completo, incluindo seu valor, na chave de cache e nas solicitações da origem.

Também é possível incluir determinados cabeçalhos gerados pelo CloudFront na chave de cache. Para obter mais informações, consulte Adicionar cabeçalhos de solicitação do CloudFront.

Cookies

Os cookies em solicitações do visualizador que o CloudFront inclui na chave de cache e nas solicitações da origem. Para cookies, é possível escolher uma das seguintes configurações:

  • None (Nenhum): os cookies nas solicitações do visualizador não são incluídos na chave de cache e não são incluídos automaticamente nas solicitações da origem.

  • All (Todos): todos os cookies em solicitações do visualizador são incluídos na chave de cache e incluídos automaticamente nas solicitações da origem.

  • Include specified cookies (Incluir os cookies especificados): você especifica quais dos cookies nas solicitações do visualizador serão incluídos na chave de cache e incluídos automaticamente nas solicitações da origem.

  • Include all cookies except (Incluir todos os cookies, exceto): você especifica quais dos cookies nas solicitações do visualizador não serão incluídos na chave de cache e não serão incluídos automaticamente nas solicitações da origem. Todos os outros cookies, exceto os que você especificar, são incluídos na chave de cache e incluídos automaticamente nas solicitações da origem.

Ao usar a configuração Include specified cookies (Incluir os cookies especificados) ou Include all cookies except (Incluir todos os cookies, exceto), você especifica cookies pelo nome, não pelo valor. Por exemplo, considere o seguinte cabeçalho Cookie:

Cookie: session_ID=abcd1234

Nesse caso, você especifica o cookie como session_ID, não como session_ID=abcd1234. No entanto, o CloudFront inclui o cookie completo, incluindo o seu valor, na chave de cache e nas solicitações da origem.

Strings de consulta

As strings de consulta de URL nas solicitações do visualizador que o CloudFront inclui na chave de cache e nas solicitações de origem. Para strings de consulta, é possível escolher uma das seguintes configurações:

  • None (Nenhuma): as strings de consulta nas solicitações do visualizador não são incluídas na chave do cache e não são incluídas automaticamente nas solicitações de origem.

  • All (Todas): todas as strings de consulta em solicitações do visualizador são incluídas na chave de cache e também são incluídas automaticamente nas solicitações de origem.

  • Include specified query strings (Incluir as strings de consulta especificadas): você especifica quais strings de consulta nas solicitações do visualizador serão incluídas na chave de cache e incluídas automaticamente nas solicitações de origem.

  • Include all query strings except (Inclui todas as strings de consulta, exceto): você especifica quais das strings de consulta nas solicitações do visualizador não serão incluídas na chave de cache e não serão incluídas automaticamente nas solicitações da origem. Todas as outras strings de consulta, com exceção das que você especificar, são incluídas na chave de cache e incluídas automaticamente nas solicitações da origem.

Ao usar a configuração Include specified query strings (Incluir as strings de consulta especificadas) ou Include all query strings except (Incluir todas as strings de consulta, exceto), você especifica as strings de consulta pelo nome, não pelo valor. Por exemplo, considere o seguinte caminho do URL:

/content/stories/example-story.html?split-pages=false

Nesse caso, você especifica a string de consulta como split-pages, não como split-pages=false. No entanto, o CloudFront inclui a string de consulta completa, incluindo seu valor, na chave de cache e nas solicitações de origem.

Suporte à compactação

Essas configurações permitem que o CloudFront solicite e armazene em cache objetos compactados nos formatos de compactação Gzip ou Brotli, quando o visualizador for compatível com eles. Essas configurações também permitem que a compactação do CloudFront funcione. Os visualizadores indicam sua compatibilidade com esses formatos de compactação com o cabeçalho HTTP Accept-Encoding.

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.

Habilite essas configurações quando qualquer uma das seguintes situações for verdadeira:

  • Sua origem retorna objetos compactados Gzip quando os visualizadores são compatíveis com ele (as solicitações contêm o cabeçalho HTTP Accept-Encoding com gzip como um valor). Nesse caso, use a configuração Gzip enabled (Habilitada para Gzip) (defina EnableAcceptEncodingGzip como true na API do CloudFront, nos AWS SDKs, na AWS CLI ou no AWS CloudFormation).

  • A origem retorna objetos compactados Brotli quando os visualizadores são compatíveis com ele (as solicitações contêm o cabeçalho HTTP Accept-Encoding com br como um valor). Nesse caso, use a configuração Brotli enabled (Habilitada para Brotli) (defina EnableAcceptEncodingBrotli como true na API do CloudFront, nos AWS SDKs, na AWS CLI ou no AWS CloudFormation).

  • O comportamento do cache ao qual esta política de cache está anexada é configurado com Compactação do CloudFront. Nesse caso, é possível habilitar o cache para Gzip ou Brotli ou ambos. Quando a compactação do CloudFront está habilitada, habilitar o cache para os dois formatos pode ajudar a reduzir os custos de transferência de dados para a internet.

nota

Se você habilitar o armazenamento em cache para um ou os dois formatos de compactação, não inclua o cabeçalho Accept-Encoding em uma política de solicitação de origem associada ao mesmo comportamento de cache. O CloudFront sempre inclui esse cabeçalho em solicitações da origem quando o cache está habilitado para qualquer um desses formatos, portanto, incluir Accept-Encoding em uma política de solicitação de origem não tem efeito.

Se o servidor de origem não retornar objetos compactados por Gzip ou Brotli, ou o comportamento do cache não estiver configurado com compactação do CloudFront, não habilite o cache para objetos compactados. Se você o habilitar, a taxa de acertos do cache poderá diminuir.

A explicação a seguir mostra como essas configurações afetam uma distribuição do CloudFront. Todas as situações descritas a seguir partem do pressuposto de que a solicitação do visualizador contém o cabeçalho Accept-Encoding. Quando a solicitação do visualizador não inclui o cabeçalho Accept-Encoding, o CloudFront não inclui esse cabeçalho na chave de cache e não o inclui na solicitação de origem correspondente.

Quando o armazenamento em cache de objetos compactados está habilitado para os dois formatos de compactação

Se o visualizador for compatível com Gzip e Brotli, ou seja, se os valores gzip e br estiverem no cabeçalho Accept-Encoding na solicitação do visualizador, o CloudFront fará o seguinte:

  • Normaliza o cabeçalho como Accept-Encoding: br,gzip e inclui o cabeçalho normalizado na chave de cache. A chave de cache não inclui outros valores que estavam no cabeçalho Accept-Encoding enviado pelo visualizador.

  • Se o ponto de presença tiver um objeto compactado Brotli ou Gzip no cache que corresponda à solicitação e não tiver expirado, o ponto de presença retornará o objeto ao visualizador.

  • Se o local da borda não tiver um objeto compactado por Brotli ou Gzip no cache, que corresponda à solicitação e não esteja expirado, o CloudFront incluirá o cabeçalho normalizado (Accept-Encoding: br,gzip) na solicitação de origem correspondente. A solicitação de origem não incluirá outros valores que estavam no cabeçalho Accept-Encoding enviado pelo visualizador.

Se o visualizador for compatível com um formato de compactação, mas não com o outro, por exemplo, se gzip for um valor no cabeçalho Accept-Encoding na solicitação do visualizador, mas br não for, o CloudFront fará o seguinte:

  • Normaliza o cabeçalho como Accept-Encoding: gzip e inclui o cabeçalho normalizado na chave de cache. A chave de cache não inclui outros valores que estavam no cabeçalho Accept-Encoding enviado pelo visualizador.

  • Se o ponto de presença tiver um objeto compactado Gzip no cache que corresponda à solicitação e não tiver expirado, o ponto de presença retornará o objeto ao visualizador.

  • Se o local da borda não tiver um objeto compactado por Gzip no cache, que corresponda à solicitação e não esteja expirado, o CloudFront incluirá o cabeçalho normalizado (Accept-Encoding: gzip) na solicitação de origem correspondente. A solicitação de origem não incluirá outros valores que estavam no cabeçalho Accept-Encoding enviado pelo visualizador.

Para entender o que o CloudFront fará se o visualizador for compatível com Brotli, mas não com Gzip, substitua os dois formatos de compactação um pelo outro no exemplo anterior.

Se o visualizador não for compatível com o Brotli ou com o Gzip, ou seja, o cabeçalho Accept-Encoding na solicitação do visualizador não contiver br ou gzip como valores, o CloudFront:

  • Não incluirá o cabeçalho Accept-Encoding na chave de cache.

  • Incluirá Accept-Encoding: identity na solicitação de origem correspondente. A solicitação de origem não incluirá outros valores que estavam no cabeçalho Accept-Encoding enviado pelo visualizador.

Quando o armazenamento em cache de objetos compactados está habilitado para um formato de compactação, mas não o outro

Se o visualizador for compatível com o formato para o qual o cache está habilitado, por exemplo, se o armazenamento em cache de objetos compactados estiver habilitado para Gzip, e o visualizador for compatível com o Gzip (gzip for um dos valores no cabeçalho Accept-Encoding na solicitação do visualizador), o CloudFront fará o seguinte:

  • Normaliza o cabeçalho como Accept-Encoding: gzip e inclui o cabeçalho normalizado na chave de cache.

  • Se o ponto de presença tiver um objeto compactado Gzip no cache que corresponda à solicitação e não tiver expirado, o ponto de presença retornará o objeto ao visualizador.

  • Se o local da borda não tiver um objeto compactado por Gzip no cache, que corresponda à solicitação e não esteja expirado, o CloudFront incluirá o cabeçalho normalizado (Accept-Encoding: gzip) na solicitação de origem correspondente. A solicitação de origem não incluirá outros valores que estavam no cabeçalho Accept-Encoding enviado pelo visualizador.

Esse comportamento é o mesmo quando o visualizador é compatível com o Gzip e o Brotli (o cabeçalho Accept-Encoding na solicitação do visualizador inclui gzip e br como valores), porque nesse cenário, o armazenamento em cache de objetos compactados para Brotli não está habilitado.

Para entender o que o CloudFront fará se o armazenamento em cache de objetos compactados estiver habilitado para Brotli, mas não para Gzip, substitua os dois formatos de compactação um pelo outro no exemplo anterior.

Se o visualizador não for compatível com o formato de compactação para o qual o cache está habilitado (o cabeçalho Accept-Encoding na solicitação do visualizador não contiver o valor desse formato), o CloudFront:

  • Não incluirá o cabeçalho Accept-Encoding na chave de cache.

  • Incluirá Accept-Encoding: identity na solicitação de origem correspondente. A solicitação de origem não incluirá outros valores que estavam no cabeçalho Accept-Encoding enviado pelo visualizador.

Quando o armazenamento em cache de objetos compactados está desabilitado para os dois formatos de compactação

Quando o armazenamento em cache de objetos compactados está desabilitado para os dois formatos de compactação, o CloudFront trata o cabeçalho Accept-Encoding da mesma forma como qualquer outro cabeçalho HTTP na solicitação do visualizador. Por padrão, ele não está incluído na chave de cache e não está incluído nas solicitações de origem. É possível incluí-lo na lista de cabeçalhos em uma política de cache ou em uma política de solicitação de origem como qualquer outro cabeçalho HTTP.