首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如果缓存缓冲器与内容不匹配,则阻止bundle响应

如果缓存缓冲器与内容不匹配,则阻止bundle响应
EN

Stack Overflow用户
提问于 2015-07-21 17:58:31
回答 1查看 385关注 0票数 16

我在一个服务器群中使用捆绑和最小化,其中有一个新旧服务器的交叉期。

我的问题是,旧的服务器正在缓存新的捆绑包缓存buster URL的内容。

例如,超文本标记语言与捆绑包URL一起缓存:

代码语言:javascript
复制
<script src="/bundle.css?v=RBgbF6A6cUEuJSPaiaHhywGqT7eH1aP8JvAYFgKh"></script>

然后向尚未使用新的代码进行更新的旧服务器发出请求,然后将其缓存。

随后对包URL的任何调用都将返回旧代码。

因此,有没有一种方法可以检查包的内容是否与散列的缓存终结器匹配?例如,如果它没有抛出404。

使用上面的例子,当请求返回到包的旧服务器时,它将检查包的内容,生成内容散列,并将其与querystring进行比较。

在这种情况下,缓存缓冲器将与实际的内容散列不匹配,并且将返回404。

最终,用户将使用捆绑包请求访问新的服务器,正确的内容将被缓存。

EN

回答 1

Stack Overflow用户

发布于 2015-08-18 21:00:00

我们自己很快就会遇到同样的问题,但我们一直坚持只更新两个域(将服务器一分为二,这样一次运行的版本不会超过一个)。

据我所知,有4种可能的选择:

  1. 使您的静态内容始终指向最新的服务器。这可以通过IP地址来完成(取决于您的配置),也可以通过使用您知道已更新的URL来完成(如果您有一台服务器对负载均衡器进行了更新,以便来自相同IP地址的请求最终会出现在同一系统上(如果您的静态内容是由您的应用服务器提供的))。如果不能在负载均衡器级别上做到这一点,那么你可以通过为不同的环境配置不同的IP地址,然后在ASP.NET中交换它们的DNS记录,一个监听CSS文件的处理程序,并检查捆绑包的哈希是否如它所期望的那样。您可能需要一个单例对象来存储这些数据,这些数据是在应用程序加载时生成的。然后,这可以返回404,301 (让它们重试),或者返回旧版本,但指示它不缓存结果。请注意,使用HttpPipelining不太可能命中不同的服务器,因此重定向可能没有帮助。
  2. 有一个配置标志,该标志是在您进行部署时设置的,它会将所有缓存破坏URL更改为当前日期。这将有效地禁用所有缓存,直到您的部署完成,这意味着将不会保留交付的任何“错误”资产。

这是你真正看到的问题,还是假设性的?除非您的站点流量非常大,并且您的部署需要几分钟的时间,否则您不太可能看到这种情况。您需要小心返回404,因为有时错误的样式表总比没有样式表要好。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31535879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档