Akamai是否在缓存的资源的查询字符串参数发生变化时从源站获取?

10

所以,我想给我的CSS和JS文件添加版本控制。我希望通过在资源路径的末尾附加查询字符串来实现这一点。

/foo/bar/baz.css
成为
/foo/bar/baz.css?version=1

这对于代理和浏览器缓存是有效的,但我想知道Akamai是否会知道这是一个新文件并从源服务器重新请求它? 我的假设是它会从源服务器重新请求该文件,但想知道是否有人确定过。

3个回答

4

是的。它精确匹配所有GET请求的URL。


2
作为一个有趣的旁注,最近一篇论文(参见:IEEE Spectrum上的文章)表明,许多CDN对查询字符串的默认处理方式可以用于针对源服务器的DOS攻击。 (http://vorlon.case.edu/~misha/otherPubs/cdn_attack.pdf) - Josh Rosen

4

不完全正确。这取决于CDN的配置。查询字符串通常不是缓存键的一部分。因此,在设置CDN交付配置时,请确保显式添加选项以将查询字符串作为缓存键的一部分包括在内。否则,你将因具有不基于查询字符串值(在这种情况下为asset版本)变化的缓存键而提供不一致的版本。


我正在寻找关于CDN查询字符串中“通常”包含什么的参考资料。似乎没有规则。我注意到浏览器缓存总是将请求中的整个URL(不包括片段)视为严格标准,但总体而言,CDN似乎并非如此。 - Phil

0

我更喜欢像'/css/DEVELOPER_BASE/foo/baz/style.css'这样的URL。

您的构建/部署脚本会全局查找并替换'/css/DEVELOPER_BASE/'为'/css/[version_number]/'

为了使其工作,您有两个选择。

  1. 您的部署脚本将CSS文件从'/css/DEVELOPER_BASE/'复制到'/css/[version_number]/'
  2. 您的Web服务器对'/css/[version_number]/'进行别名(而不是重定向)以指向'/css/DEVELOPER_BASE/'

这将使您无需担心浏览器和CDN如何处理查询参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接