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

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

A chave de cache determina se a solicitação de um visualizador para um ponto de presença do CloudFront resulta em um acerto de 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á um acerto de cache, o objeto solicitado é fornecido ao visualizador de um ponto de presença do CloudFront, o que traz 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.

Chave de cache padrão

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

  • O nome de domínio da distribuição do CloudFront (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 de visualizador como essa do exemplo chega a um local da borda do CloudFront, o CloudFront usa a chave de cache para determinar se há um acerto 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 de cache), o CloudFront enviará uma solicitação à origem para obter o objeto. Depois de obter o objeto, o CloudFront o retorna ao visualizador e o armazena no cache do ponto de presença.

Quando o CloudFront recebe outra solicitação para o mesmo objeto, conforme determinado pela chave de cache, o CloudFront fornece o objeto armazenado em cache para o visualizador imediatamente, sem enviar uma solicitação à 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. Quando você faz isso, o CloudFront usa esse cabeçalho para determinar os acertos de cache e inclui o cabeçalho nas solicitações de origem (solicitações que o CloudFront envia à origem quando há uma falha de cache).

Uma consequência potencial da inclusão de valores adicionais na chave de cache é que o CloudFront pode acabar armazenando objetos duplicados em cache devido à variação que pode ocorrer em 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 fazer com que o CloudFront armazene o mesmo objeto 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.