Como ativar o armazenamento em cache do CDN
Saiba como habilitar o armazenamento em cache de respostas HTTP no CDN da AEM as a Cloud Service. O cache de respostas é controlado por Cache-Control
, Surrogate-Control
ou Expires
cabeçalhos de cache de resposta HTTP.
Normalmente, esses cabeçalhos de cache são definidos em configurações de vhost do AEM Dispatcher usando mod_headers
, mas também podem ser definidos no código Java™ personalizado em execução no próprio Publish AEM.
Comportamento de cache padrão
Quando as configurações personalizadas NÃO estiverem presentes, os valores padrão serão usados. Na captura de tela a seguir, você pode ver o comportamento padrão de armazenamento em cache para o AEM Publish e Autor quando um Arquétipo de projeto do AEM AEM baseado no mynewsite
é implantado.
Revise a Publish AEM - Vida útil do cache padrão e o Autor do AEM - Vida útil do cache padrão para obter mais informações.
Em resumo, o AEM as a Cloud Service armazena em cache a maioria dos tipos de conteúdo (HTML, JSON, JS, CSS e Assets AEM Publish AEM) no e alguns tipos de conteúdo (JS, CSS) no Author.
Ativar armazenamento em cache
Para alterar o comportamento padrão de armazenamento em cache, você pode atualizar os cabeçalhos de cache de duas maneiras.
- Configuração do Dispatcher vhost: disponível somente para AEM Publish.
- Código Java™ personalizado: disponível para AEM Publish e Author.
Vamos analisar cada uma dessas opções.
Configuração do Dispatcher vhost
Essa opção é a abordagem recomendada para ativar o armazenamento em cache, mas só está disponível para o AEM Publish. Para atualizar os cabeçalhos de cache, use o módulo mod_headers
e a diretiva <LocationMatch>
no arquivo vhost do Apache HTTP Server. A sintaxe geral é a seguinte:
<LocationMatch "$URL$ || $URL_REGEX$">
# Removes the response header of this name, if it exists. If there are multiple headers of the same name, all will be removed.
Header unset Cache-Control
Header unset Surrogate-Control
Header unset Expires
# Instructs the web browser and CDN to cache the response for 'max-age' value (XXX) seconds. The 'stale-while-revalidate' and 'stale-if-error' attributes controls the stale state treatment at CDN layer.
Header set Cache-Control "max-age=XXX,stale-while-revalidate=XXX,stale-if-error=XXX"
# Instructs the CDN to cache the response for 'max-age' value (XXX) seconds. The 'stale-while-revalidate' and 'stale-if-error' attributes controls the stale state treatment at CDN layer.
Header set Surrogate-Control "max-age=XXX,stale-while-revalidate=XXX,stale-if-error=XXX"
# Instructs the web browser and CDN to cache the response until the specified date and time.
Header set Expires "Sun, 31 Dec 2023 23:59:59 GMT"
</LocationMatch>
A seguir está um resumo da finalidade de cada cabeçalho e dos atributos aplicáveis ao cabeçalho.
- max-age: Este atributo controla o TTL ou o "tempo de vida" do conteúdo da resposta em segundos.
- stale-while-revalidate: este atributo controla o tratamento do estado obsoleto do conteúdo da resposta na camada CDN quando a solicitação recebida está dentro do período especificado em segundos. O estado obsoleto é o período de tempo após a expiração do TTL e antes da revalidação da resposta.
- stale-if-error: este atributo controla o tratamento do estado obsoleto do conteúdo da resposta na camada CDN quando o servidor de origem está indisponível e a solicitação recebida está dentro do período especificado em segundos.
Revise os detalhes de desatualização e revalidação para obter mais informações.
Exemplo
Para aumentar a vida do navegador da Web e do cache da CDN do tipo de conteúdo de HTML para 10 minutos sem o tratamento de estado obsoleto, siga estas etapas:
-
No projeto AEM, localize o arquivo vhsot desejado do diretório
dispatcher/src/conf.d/available_vhosts
. -
Atualize o arquivo vhost (por exemplo,
wknd.vhost
) da seguinte maneira:code language-none <LocationMatch "^/content/.*\.(html)$"> # Removes the response header if present Header unset Cache-Control # Instructs the web browser and CDN to cache the response for max-age value (600) seconds. Header set Cache-Control "max-age=600" </LocationMatch>
Os arquivos vhost no diretório
dispatcher/src/conf.d/enabled_vhosts
são symlinks para os arquivos no diretóriodispatcher/src/conf.d/available_vhosts
. Portanto, se não houver, crie symlinks. -
Implante as alterações do vhost no ambiente do AEM as a Cloud Service desejado usando o Pipeline de Configuração da Camada da Web ou os Comandos RDE do Cloud Manager.
No entanto, para ter valores diferentes para a vida útil do navegador da Web e do cache CDN, você pode usar o cabeçalho Surrogate-Control
no exemplo acima. Da mesma forma que para expirar o cache em uma data e hora específicas, você pode usar o cabeçalho Expires
. Além disso, usando os atributos stale-while-revalidate
e stale-if-error
, você pode controlar o tratamento de estado obsoleto do conteúdo da resposta. O projeto WKND AEM tem uma configuração de cache de CDN de tratamento de estado obsoleto de referência.
Da mesma forma, também é possível atualizar os cabeçalhos de cache de outros tipos de conteúdo (JSON, JS, CSS e Assets).
Código Java™ personalizado
Essa opção está disponível para o AEM Publish e para o Author. No entanto, não é recomendável ativar o armazenamento em cache no AEM Author e manter o comportamento padrão do armazenamento em cache.
Para atualizar os cabeçalhos de cache, use o objeto HttpServletResponse
no código Java™ personalizado (servlet Sling, filtro de servlet Sling). A sintaxe geral é a seguinte:
// Instructs the web browser and CDN to cache the response for 'max-age' value (XXX) seconds. The 'stale-while-revalidate' and 'stale-if-error' attributes controls the stale state treatment at CDN layer.
response.setHeader("Cache-Control", "max-age=XXX,stale-while-revalidate=XXX,stale-if-error=XXX");
// Instructs the CDN to cache the response for 'max-age' value (XXX) seconds. The 'stale-while-revalidate' and 'stale-if-error' attributes controls the stale state treatment at CDN layer.
response.setHeader("Surrogate-Control", "max-age=XXX,stale-while-revalidate=XXX,stale-if-error=XXX");
// Instructs the web browser and CDN to cache the response until the specified date and time.
response.setHeader("Expires", "Sun, 31 Dec 2023 23:59:59 GMT");