Armazenar conteúdo em cache com base nos cabeçalhos de solicitação - Amazon CloudFront

Armazenar conteúdo em cache com base nos cabeçalhos de solicitação

O CloudFront permite que você escolha se quer que o CloudFront encaminhe cabeçalhos para a origem e armazene em cache versões distintas de um objeto especificado com base nos valores do cabeçalho nas solicitações do visualizador. Isso permite fornecer diferentes versões do seu conteúdo com base no dispositivo que o usuário estiver usando, a localização dele, o idioma usado por ele e uma variedade de outros critérios.

Visão geral de cabeçalhos e distribuições

Por padrão, o CloudFront não considera cabeçalhos ao armazenar seus objetos em cache em pontos de presença. Se a origem retornar dois objetos e seus valores nos cabeçalhos de solicitação forem diferentes, o CloudFront armazenará apenas uma versão do objeto em cache.

É possível configurar o CloudFront para encaminhar cabeçalhos para a origem, o que faz com que o CloudFront armazene várias versões de um objeto em cache com base nos valores de um ou mais cabeçalhos de solicitação. Para configurar o CloudFront para armazenamento em cache os objetos baseados nos valores de cabeçalhos específicos, você especifica as configurações de comportamento do cache para a sua distribuição. Para obter mais informações, consulte Cache baseado em cabeçalhos de solicitação selecionados.

Por exemplo, imagine que as solicitações do visualizador de logo.jpg contêm um cabeçalho Product personalizado com um valor de Acme ou Apex. Ao configurar o CloudFront para armazenar seus objetos em cache com base no valor do cabeçalho Product, o CloudFront encaminha solicitações de logo.jpg para a origem e inclui o cabeçalho Product e os valores de cabeçalho. O CloudFront armazena logo.jpg em cache uma vez para solicitações em que o valor do cabeçalho Product é Acme, e uma vez para solicitações em que o valor é Apex.

Você pode configurar cada comportamento de cache em uma distribuição para executar uma das seguintes ações:

  • Encaminhar todos os cabeçalhos para sua origem

    Importante

    Se você configurar o CloudFront para encaminhar todos os cabeçalhos para a origem, o CloudFront não armazenará em cache os objetos associados a esse comportamento de cache. Em vez disso, ele enviará todas as solicitações para a origem.

  • Encaminhar uma lista específica de cabeçalhos. O CloudFront armazena seus objetos em cache com base nos valores de todos os cabeçalhos especificados. O CloudFront também encaminha os cabeçalhos encaminhados por ele por padrão, mas armazena seus objetos em cache com base apenas nos cabeçalhos especificados.

  • Encaminhe somente os cabeçalhos padrão. Nessa configuração, o CloudFront não armazena seus objetos em cache com base nos valores dos cabeçalhos de solicitação.

Para saber a cota atual do número de cabeçalhos que você pode encaminhar para cada comportamento de cache ou para solicitar uma cota maior, consulte Cotas para cabeçalhos.

Para obter informações sobre como usar o console do CloudFront para atualizar uma distribuição para que o CloudFront encaminhe cabeçalhos para a origem, consulte Atualizar uma distribuição. Para obter informações sobre como usar a API do CloudFront para atualizar uma distribuição existente, consulte Atualizar distribuição na Referência da API do Amazon CloudFront.

Selecionar os cabeçalhos para basear o armazenamento em cache

Os cabeçalhos que podem ser encaminhados para a origem nos quais o CloudFront baseia o armazenamento em cache dependem de se a origem é um bucket do Amazon S3 ou uma origem personalizada.

  • Amazon S3: é possível configurar o CloudFront para encaminhar e armazenar os objetos em cache com base em vários cabeçalhos específicos (veja a lista de exceções a seguir). No entanto, recomendamos que você evite encaminhar cabeçalhos com uma origem do Amazon S3, a menos que você precise implementar o compartilhamento de recursos de origem cruzada (CORS) ou queira personalizar o conteúdo usando o Lambda@Edge em eventos voltados para a origem.

    • Para configurar o CORS, você deve encaminhar cabeçalhos que permitem que o CloudFront distribua conteúdo para sites habilitados para compartilhamento de recursos de origem cruzada (CORS). Para obter mais informações, consulte Configurar o CloudFront para respeitar as configurações do CORS.

    • Para personalizar o conteúdo usando cabeçalhos que você encaminha para a origem do Amazon S3, escreva e adicione funções do Lambda@Edge e associe-as à sua distribuição do CloudFront a ser acionada por um evento voltado para origem. Para obter mais informações sobre como trabalhar com cabeçalhos para personalizar o conteúdo, consulte Personalizar o conteúdo por cabeçalhos de país ou tipo de dispositivo: exemplos.

      Evite encaminhar os cabeçalhos que não estiver usando para personalizar o conteúdo, pois o encaminhamento de cabeçalhos extras pode reduzir a proporção de acertos do cache. Ou seja, o CloudFront não poderá atender a muitas solicitações de caches de borda como uma proporção de todas as solicitações.

  • Origem personalizada: é possível configurar o CloudFront para armazenamento em cache com base no valor de qualquer cabeçalho de solicitação, com exceção de:

    • Connection

    • Cookie: se você quiser encaminhar e armazenar em cache com base em cookies, use uma configuração separada na distribuição. Para obter mais informações, consulte Armazenar conteúdo em cache com base em cookies.

    • Host (for Amazon S3 origins)

    • Proxy-Authorization

    • TE

    • Upgrade

    É possível configurar o CloudFront para armazenar os objetos em cache com base nos valores dos cabeçalhos Date e User-Agent, mas não é recomendável fazê-lo. Esses cabeçalhos têm vários valores possíveis, e o armazenamento em cache com base nesses valores pode fazer com que o CloudFront encaminhe significativamente mais solicitações para a origem.

Para obter uma lista completa dos cabeçalhos de solicitação HTTP e a maneira como o CloudFront os processa, consulte Cabeçalhos de solicitação HTTP e comportamento do CloudFront (origens do Amazon S3 e personalizadas).

Configurar o CloudFront para respeitar as configurações do CORS

Se você habilitou o compartilhamento de recursos entre origens (CORS) em um bucket do Amazon S3 ou uma origem personalizada, escolha os cabeçalhos específicos a serem encaminhados, para respeitar as configurações do CORS. Os cabeçalhos que você precisa encaminhar diferem dependendo da origem (Amazon S3 ou personalizada) e de se você quer armazenar respostas OPTIONS.

Amazon S3

  • Se quiser que as respostas OPTIONS sejam armazenadas em cache, faça o seguinte:

    • Escolha as opções para configurações de comportamento de cache padrão que permitem o armazenamento em cache de respostas OPTIONS.

    • Configure o CloudFront para encaminhar os seguintes cabeçalhos: Origin, Access-Control-Request-Headers e Access-Control-Request-Method.

  • Se não quiser que as respostas OPTIONS sejam armazenadas em cache, configure o CloudFront para encaminhar o cabeçalho Origin junto com todos os outros cabeçalhos requeridos pela origem (por exemplo, Access-Control-Request-Headers, Access-Control-Request-Method ou outros).

Origens personalizadas: encaminhe o cabeçalho Origin com todos os outros cabeçalhos requeridos pela origem.

Configure o CloudFront para encaminhar cabeçalhos usando uma política de cache ou uma política de solicitação de origem. Para mais informações, consulte Trabalhar com políticas.

Para obter mais informações sobre o CORS e o Amazon S3, consulte Uso de compartilhamento de recursos entre origens (CORS) no Guia do usuário do Amazon Simple Storage Service.

Configurar o armazenamento em cache com base no tipo de dispositivo

Para que o CloudFront armazene em cache diferentes versões de seus objetos com base no dispositivo que um usuário está usando para visualizar seu conteúdo, configure o CloudFront para encaminhar os cabeçalhos aplicáveis para a origem personalizada:

  • CloudFront-Is-Desktop-Viewer

  • CloudFront-Is-Mobile-Viewer

  • CloudFront-Is-SmartTV-Viewer

  • CloudFront-Is-Tablet-Viewer

Com base no valor do cabeçalho User-Agent, o CloudFront define o valor desses cabeçalhos como true ou false antes de encaminhar a solicitação para a origem. Se o dispositivo se encaixar em mais de uma categoria, mais de um valor poderá ser true. Por exemplo, para alguns tablets, o CloudFront pode definir tanto CloudFront-Is-Mobile-Viewer quanto CloudFront-Is-Tablet-Viewer como true.

Configurar o armazenamento em cache com base no idioma do visualizador

Se você quiser que o CloudFront armazene diferentes versões dos objetos em cache com base no idioma especificado na solicitação, configure o CloudFront para encaminhar o cabeçalho Accept-Language para a origem.

Configurar o armazenamento em cache com base na localização do visualizador

Se você quiser que o CloudFront armazene em cache diferentes versões de seus objetos com base no país de origem da solicitação, configure-o para encaminhar o cabeçalho CloudFront-Viewer-Country para a origem. O CloudFront converte automaticamente o endereço IP da origem da solicitação em um código de país de duas letras. Para obter uma lista de códigos de país fácil de usar, classificável por código e nome do país, consulte a entrada da Wikipédia ISO 3166-1 alfa-2.

Configurar o armazenamento em cache com base no protocolo da solicitação

Se você quiser que o CloudFront armazene em cache diferentes versões de seus objetos com base no protocolo da solicitação, HTTP ou HTTPS, configure o CloudFront para encaminhar o cabeçalho CloudFront-Forwarded-Proto para a origem.

Configurar o armazenamento em cache para arquivos compactados

Se a origem for compatível com compactação Brotli, você poderá armazenar em cache com base no cabeçalho Accept-Encoding. Configure o armazenamento em cache com base em Accept-Encoding somente se a origem fornecer conteúdo diferente com base no cabeçalho.

Como o armazenamento em cache com base em cabeçalhos afeta a performance

Ao configurar o CloudFront para armazenamento em cache com base em um ou mais cabeçalhos, e os cabeçalhos tiverem mais de um valor possível, o CloudFront encaminhará mais solicitações para o servidor de origem para o mesmo objeto. Isso reduz a performance e aumenta a carga no servidor de origem. Se o servidor de origem retornar o mesmo objeto, independentemente do valor de um determinado cabeçalho, recomendamos não configurar o CloudFront para armazenamento em cache com base nesse cabeçalho.

Se você configurar o CloudFront para encaminhar mais de um cabeçalho, a ordem dos cabeçalhos nas solicitações do visualizador não afetará o armazenamento em cache, desde que os valores sejam os mesmos. Por exemplo, se uma solicitação contiver os cabeçalhos A:1,B:2 e outra solicitação contive B:2,A:1, o CloudFront armazenará em cache apenas uma cópia do objeto.

Como a letra e os valores do cabeçalho afetam o armazenamento em cache

Quando o CloudFront armazena em cache com base nos valores de cabeçalhos, ele não diferencia maiúsculas e minúsculas do nome do cabeçalho, mas diferencia maiúsculas e minúsculas do valor do cabeçalho:

  • Se as solicitações do visualizador incluírem Product:Acme e product:Acme, o CloudFront armazenará um objeto em cache apenas uma vez. A única diferença entre eles é a letra (maiúscula/minúscula) do nome de cabeçalho, que não afeta o armazenamento em cache.

  • Se as solicitações do visualizador incluírem Product:Acme e Product:acme, o CloudFront armazenará um objeto duas vezes em cache, pois o valor será Acme em algumas solicitações e acme em outras.

Cabeçalhos que o CloudFront retorna ao visualizador

Configurar o CloudFront para encaminhar e armazenar cabeçalhos em cache não afeta quais cabeçalhos o CloudFront retorna ao visualizador. O CloudFront retorna todos os cabeçalhos obtidos da origem, com algumas exceções. Para obter mais informações, consulte o tópico aplicável: