【问题标题】:Azure CDN Caching, Images not updating immediately?Azure CDN 缓存,图像没有立即更新?
【发布时间】:2018-12-03 15:19:18
【问题描述】:

我在 Azure 中创建了一个 CDN,我正在构建一个能够将图像上传到 CDN 的 .NET MVC Web 应用程序。

初始上传效果很好,图片在上传后立即可用。

如果我使用不同的图像再次上传,它不会立即从 Web 应用程序更新。但是,在我的 Azure 门户中,我可以打开存储帐户容器并立即看到可用的新文件。

无论我如何刷新或重启网络应用程序,在更新的图像上传后 5-10 分钟后它才会看到图像。

在我看来,这与 Azure 中的 CDN 缓存有关。在过去的几个小时里,我一直在寻找解决方案,而且似乎很少有针对这个特定问题的在线文档(这很奇怪,我不可能是第一个遇到这个问题的人,对吧?)。

此外,在 Azure 中 CDN 端点的缓存规则下,我只能看到一个下拉菜单,而不是我在网上其他地方看到的众多选项,而且似乎没有一个选项允许我禁用缓存。

那么,如何让更新后的图像立即显示?

谢谢!!

编辑:

这是目前对我有用的解决方案:

创建以 GUID 作为名称的所有图像。当用户上传新图像时,删除旧图像,然后上传具有不同 GUID 的新图像。由于它们具有不同的名称,因此 CDN 缓存不会干扰。

【问题讨论】:

  • CDN 有一个生存时间 (TTL)。你设置的 TTL 是多少?在 TTL 到期之前不会看到新内容。
  • @DavidMakogon 我不确定。我似乎在 Azure 的任何地方都找不到它,也没有任何关于如何查找/设置它的文档。我也不确定是否需要使用缓存控制标头或查询字符串版本控制?你能解释一下吗?谢谢!

标签: .net azure caching cdn azure-cdn


【解决方案1】:

根本不是一个罕见的问题。

检查端点缓存规则中查询字符串缓存行为的值。如果您在使用查询字符串参数的 URL 上提供上传的图像,请将缓存配置为缓存每个唯一的 url(而不是绕过或忽略查询字符串选项)。将此视为您的图像二进制值在哪里的关键。

接下来检查源是否提供您期望的 HTTP 标头(到期、max-age、etag 和缓存控制,视情况而定),并且它们具有适合您的内容的值。

还要调查清除 API。如果您的初始资源存在于 CDN 中,如果用户的上传会创建相同的密钥,您可能需要调用清除 API。

HTH

【讨论】:

    【解决方案2】:

    您可能正面临浏览器缓存。您可以使用 STRG + F5 重新加载站点和缓存,或使用其他浏览器以确保图像在 CDN 中更新。

    一种解决方案是向您的图像添加查询参数。例如。 https://yourdomain/storage/tmp.img?version=1234 然后您可以更新将强制浏览器重新加载图像的版本(但这需要重新部署您的应用程序)。

    【讨论】:

    • 如果他们设置了 TTL,比他们当前等待(和刷新浏览器)的时间长,那么刷新浏览器就无关紧要了。
    • @DavidMakogon 没错,也可能是这样!
    • 我只是仔细检查了一下,这绝对不是浏览器缓存问题。每次用户上传图片时,我也无法重新部署我的应用程序...
    猜你喜欢
    • 2016-08-20
    • 2017-05-16
    • 1970-01-01
    • 2011-09-24
    • 2013-11-07
    • 1970-01-01
    • 2022-08-19
    • 2015-08-30
    • 1970-01-01
    相关资源
    最近更新 更多