Publicação no AEM
O serviço AEM Publish tem duas camadas principais de armazenamento em cache, o AEM as a Cloud Service AEM CDN e o Dispatcher. Opcionalmente, um CDN gerenciado pelo cliente pode ser colocado na frente do CDN do AEM as a Cloud Service. A CDN da AEM as a Cloud Service fornece entrega de borda de conteúdo, garantindo que as experiências sejam entregues com baixa latência a usuários em todo o mundo. O AEM Dispatcher fornece armazenamento em cache diretamente na frente do AEM Publish AEM e é usado para atenuar a carga desnecessária no próprio Publish.
{align="center"}
CDN
O armazenamento em cache do AEM as a Cloud Service CDN é controlado por cabeçalhos de cache de resposta HTTP e tem como objetivo armazenar em cache o conteúdo para otimizar um equilíbrio entre a atualização e o desempenho. A CDN fica entre o usuário final e o Dispatcher AEM e é usada para armazenar em cache o conteúdo o mais próximo possível do usuário final, garantindo uma experiência com desempenho.
{align="center"}
Configurar como o conteúdo do CDN armazena em cache é limitado à configuração de cabeçalhos de cache em respostas 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.
Quando as solicitações/respostas HTTP são armazenadas em cache?
O AEM as a Cloud Service CDN armazena em cache somente respostas HTTP e todos os critérios a seguir devem ser atendidos:
- O status da resposta HTTP é
2xx
ou3xx
- O método de solicitação HTTP é
GET
ouHEAD
- Pelo menos um dos seguintes cabeçalhos de resposta HTTP está presente:
Cache-Control
,Surrogate-Control
ouExpires
- A resposta HTTP pode ser qualquer tipo de conteúdo, incluindo HTML, JSON, CSS, JS e arquivos binários.
Por padrão, as respostas HTTP não armazenadas em cache pelo AEM Dispatcher têm automaticamente todos os cabeçalhos de cache de resposta HTTP removidos para evitar o armazenamento em cache no CDN. Este comportamento pode ser cuidadosamente substituído usando mod_headers
com a diretiva Header always set ...
quando necessário.
O que é armazenado em cache?
O AEM as a Cloud Service CDN armazena em cache o seguinte:
- Corpo da resposta HTTP
- Cabeçalhos de resposta HTTP
Normalmente, uma solicitação/resposta HTTP para um único URL é armazenada em cache como um único objeto. No entanto, a CDN pode lidar com o armazenamento em cache de vários objetos para uma única URL, quando o cabeçalho Vary
é definido na resposta HTTP. Evite especificar Vary
em cabeçalhos cujos valores não tenham um conjunto de valores rigidamente controlado, pois isso pode resultar em muitos erros de cache, reduzindo a taxa de acertos do cache. Para dar suporte ao armazenamento em cache de solicitações variáveis no AEM Dispatcher, revise a documentação de armazenamento em cache de variantes.
Vida útil do cache cdn-cache-life
O CDN do Publish do AEM é baseado em TTL (time-to-live), o que significa que a vida do cache é determinada pelos cabeçalhos de resposta HTTP Cache-Control
, Surrogate-Control
ou Expires
. Se os cabeçalhos de cache de resposta HTTP não forem definidos pelo projeto e os critérios de qualificação forem atendidos, o Adobe definirá uma vida de cache padrão como 10 minutos (600 segundos).
Veja como os cabeçalhos de cache influenciam a vida útil do cache CDN:
- O cabeçalho de resposta HTTP
Cache-Control
instrui o navegador da Web e a CDN sobre quanto tempo armazenar a resposta em cache. O valor é em segundos. Por exemplo,Cache-Control: max-age=3600
instrui o navegador da Web a armazenar a resposta em cache por uma hora. Esse valor é ignorado pela CDN se o cabeçalho de resposta HTTPSurrogate-Control
também estiver presente. - O cabeçalho de resposta HTTP
Surrogate-Control
instrui o CDN do AEM sobre quanto tempo armazenar a resposta em cache. O valor é em segundos. Por exemplo,Surrogate-Control: max-age=3600
instrui a CDN a armazenar a resposta em cache por uma hora. - O cabeçalho de resposta HTTP
Expires
instrui o AEM CDN (e o navegador da Web) por quanto tempo a resposta em cache é válida. O valor é uma data. Por exemplo,Expires: Sat, 16 Sept 2023 09:00:00 EST
instrui o navegador da Web a armazenar a resposta em cache até a data e a hora especificadas.
Use o Cache-Control
para controlar a vida útil do cache quando ele for o mesmo para o navegador e para o CDN. Use Surrogate-Control
quando o navegador da Web deve armazenar a resposta em cache por um tempo diferente do CDN.
Vida útil do cache padrão
Se uma resposta HTTP for qualificada para o armazenamento em cache do Dispatcher AEM por qualificadores acima, os valores a seguir serão os valores padrão, a menos que a configuração personalizada esteja presente.
Como personalizar regras de cache
Configurar como o conteúdo do cache do CDN é limitado a definir cabeçalhos de cache em respostas HTTP. Normalmente, esses cabeçalhos de cache são definidos em configurações AEM Dispatcher vhost
usando mod_headers
, mas também podem ser definidos no código Java™ personalizado em execução no próprio Publish AEM.
AEM Dispatcher
{align="center"}
Quando as solicitações/respostas HTTP são armazenadas em cache?
As respostas HTTP para solicitações HTTP correspondentes são armazenadas em cache quando todos os critérios a seguir são atendidos:
-
O método de solicitação HTTP é
GET
ouHEAD
HEAD
As solicitações HTTP armazenam em cache apenas os cabeçalhos de resposta HTTP. Eles não têm corpos de resposta.
-
O status da resposta HTTP é
200
-
A resposta HTTP NÃO é para um arquivo binário.
-
O caminho da URL da solicitação HTTP termina com uma extensão, por exemplo:
.html
,.json
,.css
,.js
, etc. -
As solicitações HTTP não contêm autorização e não são autenticadas pelo AEM.
- No entanto, o armazenamento em cache de solicitações autenticadas pode ser habilitado globalmente ou seletivamente via armazenamento em cache sensível a permissões.
-
A solicitação HTTP não contém parâmetros de consulta.
- No entanto, a configuração de Parâmetros de consulta ignorados permite que solicitações HTTP com os parâmetros de consulta ignorados sejam armazenadas em cache/servidas do cache.
-
O caminho da solicitação HTTP corresponde a uma regra de permissão Dispatcher e não corresponde a uma regra de negação.
-
A resposta HTTP não tem nenhum dos seguintes cabeçalhos de resposta HTTP definidos pelo AEM Publish:
no-cache
no-store
must-revalidate
O que é armazenado em cache?
O AEM Dispatcher armazena em cache o seguinte:
-
Corpo da resposta HTTP
-
Cabeçalhos de resposta HTTP especificados na configuração de cabeçalhos de cache do Dispatcher. Consulte a configuração padrão fornecida com o Arquétipo de projeto do AEM.
Cache-Control
Content-Disposition
Content-Type
Expires
Last-Modified
X-Content-Type-Options
Vida útil do cache
O AEM Dispatcher armazena em cache as respostas HTTP usando as seguintes abordagens:
- Até que a invalidação seja acionada por meio de mecanismos como a publicação ou despublicação do conteúdo.
- TTL (vida útil) quando explicitamente configurado na configuração do Dispatcher. Veja a configuração padrão no Arquétipo de Projeto AEM revisando a configuração
enableTTL
.
Vida útil do cache padrão
Se uma resposta HTTP for qualificada para o armazenamento em cache do Dispatcher AEM por qualificadores acima, os valores a seguir serão os valores padrão, a menos que a configuração personalizada esteja presente.
Como personalizar regras de cache
O cache do AEM Dispatcher pode ser configurado por meio da configuração do Dispatcher, incluindo:
- O que é armazenado em cache
- Quais partes do cache são invalidadas ao publicar/desfazer a publicação
- Quais parâmetros de consulta de solicitação HTTP são ignorados ao avaliar o cache
- Quais cabeçalhos de resposta HTTP são armazenados em cache
- Ativar ou desativar o armazenamento em cache TTL
- … e muito mais
Usar mod_headers
para definir cabeçalhos de cache, a configuração vhost
, não afetará o armazenamento em cache do Dispatcher (baseado em TTL), pois eles são adicionados à resposta HTTP depois que o AEM Dispatcher processa a resposta. Para afetar o armazenamento em cache do Dispatcher por meio de cabeçalhos de resposta HTTP, é necessário o código Java™ personalizado em execução no AEM Publish que define os cabeçalhos de resposta HTTP apropriados.