gpt4 book ai didi

asp.net - 如果缓存破坏器与内容不匹配,则阻止 bundle 响应

转载 作者:行者123 更新时间:2023-12-02 06:42:56 24 4
gpt4 key购买 nike

我正在服务器场中使用捆绑和缩小,其中存在新旧服务器的交叉期。

我遇到的问题是旧服务器正在缓存新包缓存破坏器 URL 的内容。

<小时/>

例如, HTML 使用 bundle URL 进行缓存:

<script src="/bundle.css?v=RBgbF6A6cUEuJSPaiaHhywGqT7eH1aP8JvAYFgKh"></script>

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

bundle URL 的任何后续调用都将返回旧代码。

<小时/>

因此,有没有一种方法可以检查 bundle 的内容是否与哈希缓存破坏器匹配?例如,如果它不抛出 404。

使用上面的示例,当请求返回到 bundle 的旧服务器时,它将检查 bundle 的内容,生成内容哈希并将其与查询字符串进行比较。

在这种情况下,缓存破坏程序将与实际内容哈希不匹配,并且将返回 404。

最终,用户将通过捆绑请求访问服务器,并且正确的内容将被缓存。

<小时/>

enter image description here

最佳答案

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

据我所知,有 4 种可能的替代方案:

  1. 让您的静态内容始终指向最新的服务器。这可以通过 IP 地址或使用您知道已更新的 URL(如果您有首先更新的服务器)来完成(取决于您的配置)。
  2. 配置负载平衡器,以便来自同一 IP 地址的请求最终到达同一系统(如果您的静态内容由应用服务器提供)。如果无法在负载均衡器级别完成此操作,那么您可以通过为不同环境配置不同的 IP 地址,然后交换其 DNS 记录来进一步完成此操作。
  3. 在 ASP.NET 中实现一个处理程序,用于监听 CSS 文件,并检查包的哈希值是否符合预期。当您的应用程序加载时生成它们时,您可能需要一个单例对象来存储它们。然后,这可以返回 404、301(让它们重试)或返回旧版本,但指示它不缓存结果。请注意,使用 HttpPipelined,您不太可能访问不同的服务器,因此重定向可能没有帮助。
  4. 在进行部署时设置一个配置标志,将所有缓存无效 URL 更改为当前日期。这将有效地禁用所有缓存,直到部署完成,这意味着交付的任何“错误” Assets 都不会被保留。

这是您实际遇到的问题,还是假设的问题?除非您的网站流量非常高并且部署需要花费几分钟的时间,否则您不太可能看到这种情况。您需要警惕返回 404,因为有时错误的样式表比没有样式表好。

关于asp.net - 如果缓存破坏器与内容不匹配,则阻止 bundle 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31535879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com