Armazenar em cache o conteúdo com base em parâmetros de string de consulta - Amazon CloudFront

Armazenar em cache o conteúdo com base em parâmetros de string de consulta

Alguns aplicativos web usam query strings para enviar informações para a origem. Uma string de consulta é a parte de uma solicitação da web que aparece após um caractere ?. Ela pode conter um ou mais parâmetros separados por caracteres &. No seguinte exemplo, a string de consulta inclui dois parâmetros, color = red e size = grandes:

https://d111111abcdef8.cloudfront.net/images/image.jpg?color=red&size=large

Para distribuições, você pode escolher se deseja que o CloudFront encaminhe strings de consulta para a origem e se deve armazenar o conteúdo em cache com base em todos os parâmetros ou em parâmetros selecionados. Por que isso pode ser útil? Considere o seguinte exemplo.

Imagine que seu site esteja disponível em cinco idiomas. A estrutura do diretório e os nomes de arquivo de todas as cinco versões do site são idênticos. Quando um usuário visualiza seu site, as solicitações encaminhadas para o CloudFront incluem um parâmetro de string de consulta de idioma com base no idioma escolhido do usuário. É possível configurar o CloudFront para encaminhar strings de consulta para a origem e para armazenamento em cache com base no parâmetro de idioma. Se você configurar o servidor da Web para retornar a versão de uma página correspondente ao idioma selecionado, o CloudFront armazenará em cache a versão de cada idioma separadamente, com base no valor do parâmetro de string de consulta do idioma.

Neste exemplo, se a página principal do site for main.html, as cinco solicitações a seguir farão com que o CloudFront armazene main.html cinco vezes em cache, uma vez para cada valor do parâmetro da string de consulta do idioma:

  • https://d111111abcdef8.cloudfront.net/main.html?language=de

  • https://d111111abcdef8.cloudfront.net/main.html?language=en

  • https://d111111abcdef8.cloudfront.net/main.html?language=es

  • https://d111111abcdef8.cloudfront.net/main.html?language=fr

  • https://d111111abcdef8.cloudfront.net/main.html?language=jp

Observe o seguinte:

  • Alguns servidores HTTP não processam parâmetros de query string e, portanto, não retornam diferentes versões de um objeto com base nos valores de parâmetro. Para essas origens, se você configurar o CloudFront para encaminhar parâmetros de string de consulta para a origem, o CloudFront armazenará em cache com base nos valores dos parâmetros, mesmo que a origem retorne versões idênticas do objeto ao CloudFront para cada valor de parâmetro.

  • Para que os parâmetros de string de consulta funcionem conforme descrito no exemplo acima com os idiomas, é necessário usar o caractere & como delimitador entre os parâmetros da string de consulta. Se você usar um delimitador diferente, poderá obter resultados inesperados, dependendo dos parâmetros que especificar para o CloudFront usar como base para o armazenamento em cache, e a ordem em que os parâmetros serão exibidos na string de consulta.

    Os exemplos a seguir mostram o que acontece quando você usa um delimitador diferente e configura o CloudFront para armazenamento em cache com base no parâmetro color:

    • Na solicitação a seguir, o CloudFront armazena o conteúdo em cache com base no valor do parâmetro color, mas interpreta o valor como red;size=large:

      https://d111111abcdef8.cloudfront.net/images/image.jpg?color=red;size=large

    • Na solicitação a seguir, o CloudFront armazena o conteúdo em cache, mas não baseia o armazenamento em cache nos parâmetros da string de consulta. Isso ocorre porque você configurou o CloudFront para armazenamento em cache com base no parâmetro color, mas ele interpreta a seguinte string como contendo apenas um parâmetro size com um valor de large;color=red:

      https://d111111abcdef8.cloudfront.net/images/image.jpg?size=large;color=red

É possível configurar o CloudFront para realizar uma destas ações:

  • Não encaminhar query strings para a origem. Se você não encaminhar strings de consulta, o CloudFront não armazenará em cache com base nos parâmetros da string de consulta.

  • Encaminhar query strings para a origem e armazenar em cache com base em todos os parâmetros na query string.

  • Encaminhar query strings para a origem e armazenar em cache com base em parâmetros específicos na query string.

Para mais informações, consulte Otimizar o armazenamento em cache.

Configurações do console e da API para encaminhamento e armazenamento de strings de consulta em cache

Para configurar o encaminhamento e o armazenamento da string de consulta em cache no console do CloudFront, consulte as seguintes configurações em Valores especificados ao criar ou atualizar uma distribuição:

Para configurar o encaminhamento e armazenamento em cache de strings de consulta com a API do CloudFront, consulte as seguintes configurações em DistributionConfig e em DistributionConfigWithTags na Referência da API do Amazon CloudFront:

  • QueryString

  • QueryStringCacheKeys

Otimizar o armazenamento em cache

Ao configurar o CloudFront para armazenamento em cache com base nos parâmetros da string de consulta, siga seguir as etapas a seguir para reduzir o número de solicitações que o CloudFront encaminha para a origem. Quando os pontos de presença do CloudFront fornecem objetos, a carga no servidor de origem e a latência são reduzidas, pois os objetos são fornecidos de locais mais próximos dos usuários.

Armazenamento em cache baseado apenas em parâmetros para os quais a origem retorna diferentes versões de um objeto

Para cada parâmetro da string de consulta encaminhado pela aplicação Web para o CloudFront, o CloudFront encaminha solicitações para cada valor de parâmetro para a origem e armazena em cache uma versão separada do objeto para cada valor de parâmetro. Isso será verdadeiro mesmo se a sua origem sempre retornar o mesmo objeto, independentemente do valor do parâmetro. Para vários parâmetros, o número de solicitações e o número de objetos se multiplicam. Por exemplo, se as solicitações de um objeto incluírem dois parâmetros com três valores diferentes cada, o CloudFront armazenará seis versões desse objeto, supondo-se que você siga as outras recomendações desta seção.

Recomendamos configurar o CloudFront para armazenamento em cache com base apenas nos parâmetros da string de consulta para os quais a origem retorna diferentes versões, e considerar cuidadosamente os méritos do armazenamento em cache com base em cada parâmetro. Por exemplo, imagine que você tem um site de varejo. Você tem fotos de uma jaqueta em seis cores diferentes, e ela tem 10 opções de tamanhos diferentes. As imagens que você tem da jaqueta mostram a cores diferentes, mas não os tamanhos. Para otimizar o armazenamento em cache, configure o CloudFront para armazenamento em cache apenas com base no parâmetro de cor, não de tamanho. Isso aumenta a probabilidade de o CloudFront atender a uma solicitação do cache, melhorando a performance e reduzindo a carga na origem.

Sempre liste os parâmetros na mesma ordem

A ordem dos parâmetros é importante em query strings. No exemplo a seguir, as query strings são idênticas, exceto pelo fato de os parâmetros estarem em ordem diferente. Isso fará com que o CloudFront encaminhe duas solicitações separadas de image.jpg para a origem e armazene duas versões separadas do objeto em cache:

  • https://d111111abcdef8.cloudfront.net/images/image.jpg?color=red&size=large

  • https://d111111abcdef8.cloudfront.net/images/image.jpg?size=large&color=red

Recomendamos que você sempre indique os nomes de parâmetro na mesma ordem, como em ordem alfabética.

Sempre use a mesma letra (maiúscula ou minúscula) para os nomes e valores de parâmetro

O CloudFront diferencia letras maiúsculas de minúsculas de nomes e valores de parâmetros ao armazenar em cache com base nos parâmetros da string de consulta. No exemplo a seguir, as query strings são idênticas, exceto pelo formato das letras nos nomes e valores do parâmetro. Isso faz com que o CloudFront encaminhe quatro solicitações separadas de image.jpg para a origem e armazene quatro versões separadas do objeto em cache:

  • https://d111111abcdef8.cloudfront.net/images/image.jpg?color=red

  • https://d111111abcdef8.cloudfront.net/images/image.jpg?color=Red

  • https://d111111abcdef8.cloudfront.net/images/image.jpg?Color=red

  • https://d111111abcdef8.cloudfront.net/images/image.jpg?Color=Red

Recomendamos que você use letras maiúsculas/minúsculas de forma consistente nos nomes e valores de parâmetro, como todas as letras minúsculas.

Não use nomes de parâmetro em conflito com signed URLs

Se você estiver usando signed URLs para restringir o acesso ao conteúdo (se tiver adicionado assinantes confiáveis à distribuição), o CloudFront removerá os seguintes parâmetros da string de consulta antes de encaminhar o restante do URL para a origem:

  • Expires

  • Key-Pair-Id

  • Policy

  • Signature

Ao usar signed URLs e quiser configurar o CloudFront para encaminhar strings de consulta para a origem, seus próprios parâmetros da string de consulta não podem ser denominados Expires, Key-Pair-Id, Policy ou Signature.

Parâmetros de string de consulta e logs padrão do CloudFront (logs de acesso)

Se você habilitar o registro em log, o CloudFront registrará o URL completo em log, incluindo os parâmetros da string de consulta. Isso será verdadeiro independentemente de você ter configurado o CloudFront para encaminhar strings de consulta para a origem. Para obter mais informações sobre o log do CloudFront, consulte Configurar e usar logs padrão (logs de acesso).