同一图像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
要解决此问题,请执行以下步骤:
- 了解每个CDN POP都维护其自身的缓存。 在每个POP处第一次请求给定URL将导致缓存未命中;来自同一POP的后续请求(当TTL有效时)将是缓存命中。
- 确保servlet为浏览器和CDN设置明确的缓存标头。 使用
Cache-Control: max-age=86400, public并考虑为特定于CDN的TTL (如果支持)添加Surrogate-Control或s-maxage。 - 避免使用
private或no-store指令,因为这些指令会阻止CDN缓存。 - 使用诸如
curl之类的工具和查看CDN日志,以确认每个POP上的第一个请求都是MISS,并且TTL内来自同一POP的后续请求都是HIT。
有关详细信息,请参阅AEM as a Cloud Service CDN缓存文档。
recommendation-more-help
experience-cloud-kcs-help-kbarticles