云端文件名

Cloudfront file names

我正在一家初创公司的工作中学习 AWS 和 Cloudfront (CF)。由于时间关系,大部分学习不是很系统(不深入)。一个问题我就是找不到解决方案。我的 CF 发行版链接到一个 S3 存储桶,其中包含所有资产(CSS、JS 文件等)。存储桶中的文件名如下所示:

我们曾在大学学习过 CDN,我记得他们计算文件的哈希值并将这些哈希值用于 "find" 服务器的位置 (IP)(在分发中,类似于名称解析在 DNS 中)该文件为其提供服务的位置。也许我误解了那部分?

因此问题:

此外,值得注意的是,在某些时候部署是使用 capistrano 完成的(是的,它是 Rails),它使用 asset_sync gem 来推送资产到 S3。但是,在新产品中我们没有使用它 - 只是对所有资产进行版本控制。

  • what is that alphanumeric sequence in the names served by CF? Is that a hash?

是的。 32 字节散列,可能是 SHA-256。

  • who calculates that value: CF, S3 or deployment process?

None 个。这实际上是 Rails 的一部分 - 它会向您的文件名添加一个 'version' 哈希,以便您可以发送 far-future 到期 HTTP headers (例如,您可以对客户端浏览器说"cache this file, and you don't need to fetch it from the server again for a year").

在没有哈希的情况下这样做会在您更新资产时造成麻烦,因为每个用户都必须 hard-reload(没有缓存)才能获得新版本。如果您将版本散列和 link 更改为新 HTML 头部中的散列,则 浏览器再次获取它,因为它是一个新文件。

  • why is that value different sometimes and results in 404 errors on the server?

见上文。散列随您发布的资产的每个版本而变化;如果有人试图获取旧资产或哈希值不再存在于您的 S3 存储桶中的资产,则会导致 404。