Noções básicas sobre a chave de cache - Amazon CloudFront

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Noções básicas sobre a chave de cache

A chave de cache determina se uma solicitação do visualizador para um ponto de CloudFront borda resulta em um acerto no cache. A chave de cache é o identificador exclusivo de um objeto no cache. Cada objeto no cache tem uma chave de cache exclusiva.

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á uma ocorrência de cache, o objeto solicitado é servido ao visualizador a partir de uma localização CloudFront periférica, que tem 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 que resultam 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 as seções a seguir.

É possível modificar os valores (strings de consulta de URL, cabeçalhos HTTP e cookies) na chave de cache usando uma política de cache. (Também é possível modificar a chave de cache usando uma função do Lambda@Edge.) Antes de modificar a chave de cache, é importante entender como a aplicação foi projetada e quando e como ela pode fornecer respostas diferentes com base nas características da solicitação do visualizador. Quando um valor na solicitação do visualizador determinar a resposta retornada pela origem, inclua esse valor na chave de cache. Mas se você incluir um valor na chave de cache que não afete a resposta retornada pela origem, poderá acabar armazenando objetos duplicados em cache.

A chave de cache padrão

Por padrão, a chave de cache de uma CloudFront distribuição inclui as seguintes informações:

  • O nome de domínio da CloudFront distribuição (por exemplo, d111111abcdef8.cloudfront.net)

  • O caminho do URL do objeto solicitado (por exemplo, /content/stories/example-story.html)

nota

O método OPTIONS está incluído na chave de cache para solicitações de OPTIONS. Isto significa que respostas para as solicitações de OPTIONS são armazenadas em cache separadamente das respostas para as solicitações de GET e HEAD.

Outros valores da solicitação do visualizador não são incluídos na chave de cache, por padrão. Considere a seguinte solicitação HTTP de um navegador da Web.

GET /content/stories/example-story.html?ref=0123abc&split-pages=false HTTP/1.1 Host: d111111abcdef8.cloudfront.net User-Agent: Mozilla/5.0 Gecko/20100101 Firefox/68.0 Accept: text/html,*/* Accept-Language: en-US,en Cookie: session_id=01234abcd Referer: https://news.example.com/

Quando uma solicitação do visualizador, como este exemplo, chega a CloudFront um ponto de presença, CloudFront usa a chave de cache para determinar se há uma ocorrência de cache. Por padrão, somente os seguintes componentes da solicitação são incluídos na chave de cache: /content/stories/example-story.html e d111111abcdef8.cloudfront.net. Se o objeto solicitado não estiver no cache (uma falha no cache), CloudFront envia uma solicitação à origem para obter o objeto. Depois de obter o objeto, o CloudFront retorna ao visualizador e o armazena no cache da localização da borda.

Quando CloudFront recebe outra solicitação para o mesmo objeto, conforme determinado pela chave de cache, envia CloudFront o objeto em cache para o visualizador imediatamente, sem enviar uma solicitação para a origem. Por exemplo, considere a seguinte solicitação HTTP que é recebida após a solicitação anterior.

GET /content/stories/example-story.html?ref=xyz987&split-pages=true HTTP/1.1 Host: d111111abcdef8.cloudfront.net User-Agent: Mozilla/5.0 AppleWebKit/537.36 Chrome/83.0.4103.116 Accept: text/html,*/* Accept-Language: en-US,en Cookie: session_id=wxyz9876 Referer: https://rss.news.example.net/

Essa solicitação é para o mesmo objeto que a solicitação anterior, embora seja diferente da solicitação anterior. Ela tem uma string de consulta de URL diferente, cabeçalhos User-Agent e Referer diferentes, e outro cookie de session_id. No entanto, nenhum desses valores faz parte da chave de cache por padrão, portanto, essa segunda solicitação resulta em um acerto de cache.

Personalizar a chave de cache

Em alguns casos, convém incluir mais informações na chave de cache, mesmo que isso possa resultar em menos acertos de cache. Você especifica o que incluir na chave de cache usando uma política de cache.

Por exemplo, se o servidor de origem usar o cabeçalho HTTP Accept-Language em solicitações do visualizador para retornar conteúdo diferente com base no idioma do visualizador, convém incluir esse cabeçalho na chave de cache. Ao fazer isso, CloudFront usa esse cabeçalho para determinar os acessos ao cache e inclui o cabeçalho nas solicitações de origem (solicitações que são CloudFront enviadas para a origem quando há uma falha no cache).

Uma possível consequência da inclusão de valores adicionais na chave de cache é que isso CloudFront pode acabar armazenando objetos duplicados em cache devido à variação que pode ocorrer nas solicitações do visualizador. Por exemplo, os visualizadores podem enviar um dos seguintes valores para o cabeçalho Accept-Language:

  • en-US,en

  • en,en-US

  • en-US, en

  • en-US

Todos esses valores diferentes indicam que o idioma do visualizador é o inglês, mas a variação pode CloudFront fazer com que o mesmo objeto seja armazenado em cache várias vezes. Isso pode reduzir os acertos de cache e aumentar o número de solicitações de origem. Para evitar essa duplicação, não coloque o cabeçalho Accept-Language na chave de cache. Em vez disso, configure o site ou a aplicação de modo que eles usem URLs diferentes para conteúdo em diferentes idiomas (por exemplo, /en-US/content/stories/example-story.html).

Para qualquer valor específico que você pretenda incluir na chave de cache, entenda quantas variações diferentes desse valor podem aparecer nas solicitações do visualizador. Para determinados valores de solicitação, raramente faz sentido incluí-los na chave de cache. Por exemplo, o cabeçalho User-Agent pode ter milhares de variações exclusivas, portanto, geralmente ele não é um bom candidato para inclusão na chave de cache. Os cookies que têm valores específicos do usuário ou específicos da sessão e são exclusivos em milhares (ou mesmo milhões) de solicitações também não são bons candidatos para inclusão na chave de cache. Se você incluir esses valores na chave de cache, cada variação exclusiva resultará em outra cópia do objeto no cache. Se essas cópias do objeto não forem exclusivas, ou se você acabar com um número tão grande de objetos ligeiramente diferentes que cada objeto obtém apenas um pequeno número de acertos de cache, convém considerar uma abordagem diferente. É possível excluir esses valores altamente variáveis da chave de cache ou marcar objetos como não armazenáveis em cache.

Tenha cuidado ao personalizar a chave de cache. Às vezes, isso é desejável, mas pode ter consequências não intencionais, como armazenar em cache objetos duplicados, reduzir a taxa de acertos do cache e aumentar o número de solicitações de origem. Se o site ou a aplicação de origem precisar receber determinados valores de solicitações do visualizador para análise, telemetria ou outros usos, mas esses valores não alterarem o objeto retornado pela origem, use uma política de solicitação de origem para incluir esses valores em solicitações de origem, mas não os inclua na chave de cache.