Cloudfront文件名

时间:2016-10-27 18:17:10

标签: ruby-on-rails amazon-s3 cdn amazon-cloudfront

我在创业公司的工作中学习AWS和Cloudfront(CF)。由于时间限制,大多数学习不是非常系统化(不深入)。我无法找到解决方案的一个问题。我的CF发行版链接到一个S3存储桶,其中包含所有资产(CSS,JS文件等)。存储桶中的文件名如下所示:

assets in s3

我们在某些时候覆盖了大学的CDN,我记得他们计算了文件的哈希并使用这些哈希来找到"找到"服务器的位置(IP)(在分发中,类似于DNS中的名称解析),该文件将在其中提供服务。也许我误解了那一部分?

因此问题:

  • CF服务的名称中的字母数字序列是什么?那是哈希吗?
  • 谁计算该值:CF,S3或部署过程?
  • 为什么有时这个值会有所不同,导致服务器上出现404错误?

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

1 个答案:

答案 0 :(得分:3)

  
      
  • CF服务的名称中的字母数字序列是什么?那是哈希吗?
  •   

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

  
      
  • 谁计算该值:CF,S3或部署过程?
  •   

没有一个。这实际上是Rails的一部分 - 它添加了一个'版本'哈希到您的文件名,以便您可以发送远期到期的HTTP标头(例如,您可以说客户端浏览器"缓存此文件,并且您不需要再次从服务器获取它一年")。

在没有哈希的情况下这样做会在更新资产时产生地狱,因为每个用户都必须硬重新加载(没有缓存)才能获得新版本。如果您更改版本哈希,并链接到新HTML头中的那个,那么 浏览器再次取回它,因为它是一个新文件。

  
      
  • 为什么有时这个值会有所不同,导致服务器上出现404错误?
  •   

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