我有 blob 存储和 CDN 端点,用于存储我的静态内容。现在我想更新 app.js 文件,因为它被修改了,但是当我将此文件写入 blob 时,CDN 仍然给我旧的 app.js 文件。如何更新我的 app.js 文件?或者我必须等到我的缓存不会结束?
6 回答
只是您无法在缓存对象到期之前对其进行更新。
来自https://msdn.microsoft.com/en-us/library/azure/gg680303.aspx:
如果不再希望在 Azure 内容交付网络 (CDN) 中缓存对象,可以采取以下步骤之一:
对于 Azure Blob,可以从公共容器中删除 Blob。
您可以将容器设为私有而不是公开。有关详细信息,请参阅限制对容器和 Blob 的访问。
您可以使用 Azure 管理门户禁用或删除 CDN 终结点。
您可以修改托管服务以不再响应对象请求。
已缓存在 CDN 中的对象将保持缓存状态,直到对象的生存时间到期。当生存时间到期时,CDN 将检查 CDN 端点是否仍然有效以及对象是否仍然可以匿名访问。如果不是,则该对象将不再被缓存。
当前没有可用于 Azure CDN 的显式“清除”工具。
如果可能,其他解决方法包括使用假查询字符串或新文件名。见这里:https ://stackoverflow.com/a/8773202/908336
很久以前就问过这个问题。我只是想更新对我有用的方法。它是微软推荐的。本质上,您需要在 Blob 存储中设置缓存控制标头。您可以使用值“public, max-age=3600”设置缓存控制标头。这会将您的文件缓存大约 1 小时。
https://azure.microsoft.com/en-us/documentation/articles/cdn-manage-expiration-of-blob-content/
CDN 很简单。当请求进来时,它会从源(在本例中为 blob 存储)获取内容,然后根据标头将其缓存一段时间Cache-Control
。它将继续提供相同的内容,直到缓存过期。
没有办法告诉 CDN 提前过期。
其他人可能会提出有关如何处理此问题的更有用的建议(例如查询字符串参数),但我只是想简单地解释一下 CDN 的缓存是如何工作的。
你可以从 Azure 新管理门户中清除内容。
现在唯一能做到这一点的方法是联系 Azure 支持,然后他们将向 Verizon EdgeCast 开一张支持票,以从 CDN 中删除该文件,届时该文件将更新。在基本的 Azure 支持计划中,整个过程大约需要 8 小时。这不是一个好的解决方案,我真的希望他们将其更新到我们可以以编程方式从 CDN 中清除某些内容的位置。这似乎是他们缺乏的一个基本功能。我认为现在最好的选择是启用查询字符串状态,然后在更新时更新该查询字符串。我们对像 /js/custommix.js?version=1 这样的 js 文件执行此操作。然后,当我们需要更新它们时,我们会从我们的配置中附加一个新版本。
http://azure.microsoft.com/en-us/blog/best-practices-for-the-windows-azure-content-delivery-network/
如何清除 Windows Azure CDN 中的内容或使其无效?
从 1.4 开始,没有可用的清除功能。此功能正在开发中。最好的新鲜度控制是设置好的缓存过期标头,如本文档和 MSDN 上的 Windows Azure CDN 文档中所述。
看来默认到期时间是 7 天。
来自:http: //msdn.microsoft.com/en-us/library/azure/gg680306.aspx
从 Azure CDN 缓存中受益最多的 Blob 是在其生存时间 (TTL) 期间经常访问的 Blob。Blob 在缓存中保留 TTL 时间段,然后在该时间过后由 Blob 服务刷新。然后该过程重复。
控制 TTL 有两种选择:
不要设置缓存值,因此使用 7 天的默认 TTL。
在 Put Blob、Put Block List 或 Set Blob Properties 请求上显式设置 x-ms-blob-cache-control 属性,或使用 Azure 托管库设置 BlobProperties.CacheControl 属性。设置此属性会设置 Blob 的 Cache-Control 标头的值。标头或属性的值应以秒为单位指定适当的值。例如,要将最大缓存期限设置为一年,您可以将请求头指定为 x-ms-blob-cache-control: public, max-age=31556926。有关设置缓存标头的详细信息,请参阅 HTTP/1.1 规范。