在AEM as a Cloud Service中使Dispatcher缓存失效,以获取更新的/etc.clientlibs资源

本文介绍如何通过配置Dispatcher缓存操作并使用缓存嵌套技术,确保在Adobe Experience Manager as a Cloud Service中部署后提供/etc.clientlibs下更新的静态资源。

描述 description

环境

Adobe Experience Manager as a Cloud Service (AEMaaCS)(所有版本)

症状

  • /etc.clientlibs下更新的静态资源(如JavaScript文件)在部署后不会立即显示。
  • 浏览器、Dispatcher或CDN将继续提供以前版本的文件。

原因

Dispatcher和CDN缓存会保留具有长生命周期缓存标头的静态资源,除非您使它们失效或将其刷新。 除非配置缓存操作,否则Cloud Manager部署不会自动清除/etc.clientlibs的这些缓存。 要立即传播更新,请使用基于URL的缓存无效。

解决方法 resolution

请按照以下步骤解决问题:

  1. 在Cloud Manager管道中配置Dispatcher缓存操作:

    1. 在Cloud Manager中,编辑部署管道。

    2. 转到Dispatcher配置部分,然后选择配置

    3. 使用以下设置添加缓存操作:

      1. 路径: /etc.clientlibs/<your-project>/clientlibs/<your-clientlib>/*
      2. 类型:选择 无效 以将缓存的内容标记为过时,或选择 刷新 以将其删除。
    4. 选择添加路径应用,然后保存管道配置。

    5. 运行管道以使指定的路径失效或进行刷新。

  2. 对静态资源使用基于URL的缓存无效:

    • 更新静态JavaScript或CSS文件时,请使用版本化的文件名,如swiper-bundle-v14.min.js
    • 或者,附加查询参数,如swiper-bundle.min.js?v=20240819
    • 更改URL可确保Dispatcher和CDN将更新后的文件视为新资源。
  3. 查看Cache-Control标头:

    • 如果您使用长期TTL(如max-age=31536000, immutable),请对资源URL进行版本控制。
    • 如果您没有对URL进行版本控制,请使用较短的TTL并从标头中删除immutable
  4. 通过代理为客户端库提供服务:

    • 通过allowProxy=true的AEM客户端库为JavaScript和CSS提供服务。
    • 避免硬编码原始URL,如/etc.clientlibs/.../resources/*.js
  5. 验证更新:

    1. 管道执行完成后,访问更新的资源URL。
    2. 确认资源包含最新更改。
    3. 查看响应标头以验证预期的缓存行为。
recommendation-more-help
experience-cloud-kcs-help-kbarticles