同一图像URL在每个POP处的CDN缓存未命中

本文介绍即使缓存控制标头指定了24小时TTL,Adobe Experience Manager as a Cloud Service中servlet提供的图像也可能导致不同CDN存在点(POP)处CDN缓存MISS的原因,并提供有关预期CDN缓存行为的指导。

描述 description

环境

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

问题/症状

servlet返回商店页面的JPEG图像,并设置Cache-Control: max-age=86400标头(24小时)。 但是,CDN日志显示,一天内从发布实例中多次获取同一图像URL,并且不同CDN位置(POP)的缓存状态缺失。

示例日志条目:

  • /path/sample.jpg在POP“RTM”处缓存未命中
  • /path/sample.jpg在POP“TOJ”处缓存失败

我们期望在收到第一个请求后,从CDN缓存和提供图像24小时,而不考虑POP。 相反,每个POP在其第一次图像请求时会遇到缓存未命中。

原因

每个CDN POP运行自己的缓存。 在每个POP处对资源的第一个请求都会导致MISS,并且只有来自该POP的后续请求才会从缓存中提供服务,直到TTL过期。

解决方法 resolution

要解决此问题,请执行以下步骤:

  1. 了解每个CDN POP都维护其自身的缓存。 在每个POP处第一次请求给定URL将导致缓存未命中;来自同一POP的后续请求(当TTL有效时)将是缓存命中。
  2. 确保servlet为浏览器和CDN设置明确的缓存标头。 使用Cache-Control: max-age=86400, public并考虑为特定于CDN的TTL (如果支持)添加Surrogate-Controls-maxage
  3. 避免使用privateno-store指令,因为这些指令会阻止CDN缓存。
  4. 使用诸如curl之类的工具和查看CDN日志,以确认每个POP上的第一个请求都是MISS,并且TTL内来自同一POP的后续请求都是HIT。

有关详细信息,请参阅AEM as a Cloud Service CDN缓存文档。

recommendation-more-help
experience-cloud-kcs-help-kbarticles