相关疑难解决方法(0)

如果缓存占用者与内容不匹配,则阻止bundle响应

我在服务器场中使用捆绑和缩小,其中存在旧服务器和新服务器的交叉时段.

我遇到的问题是旧服务器正在缓存新的bundle cache buster URL的内容.


例如,使用新的捆绑包URL 缓存新的 HTML :

<script src="/bundle.css?v=RBgbF6A6cUEuJSPaiaHhywGqT7eH1aP8JvAYFgKh"></script>
Run Code Online (Sandbox Code Playgroud)

然后,它向服务器发出请求,该服务器尚未使用新的CSS代码进行更新,然后缓存.

然后,对捆绑URL的任何后续调用都将返回旧代码.


因此有没有办法检查捆绑包的内容是否与散列缓存破坏者匹配?如果它不抛出404例如.

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

在这种情况下,缓存 - 破坏者将不匹配实际内容散列,并且将返回404.

最终,用户将使用捆绑请求命中服务器,并且将缓存正确的内容.


在此输入图像描述

asp.net asp.net-mvc caching bundling-and-minification

16
推荐指数
1
解决办法
317
查看次数

MVC 5捆绑和Azure CDN(查询字符串)

我一直在关注本教程:https://azure.microsoft.com/en-us/documentation/articles/cdn-serve-content-from-cdn-in-your-web-application/

直到我注意到,捆绑的脚本和CSS文件与返回的一切都是伟大的cache: no-cache,expires: -1pragma: no-cache头.当然,这与Azure无关.为了证明这一点,我通过直接从我的网站访问它来测试捆绑,而不是CDN - 即.mysite.com/bundles/mybundle?v={myassemblyversion}.结果是一样的.当我禁用CDN并使用vMVC生成的查询字符串访问捆绑文件时,标头符合预期:公共缓存,到期时间为一年.

我试图实现IBundleTransform接口,但它context.BundleVirtualPath是只读的(即使它说获取或设置虚拟路径......).我也尝试修改响应标头Application_EndRequest(),但它也没有用.我的最后一个赌注是编写IIS出站规则,但由于我的bundle(与"custom"v查询字符串一起使用)不返回Last-Modified标题,所以这也是徒劳的尝试.

我的问题是:如果我希望将捆绑的文件缓存在客户端上,那么我如何使用Azure CDN绑定MVC - 也就是说,直到v查询字符串发生变化?

model-view-controller asp.net-mvc caching azure bundling-and-minification

6
推荐指数
1
解决办法
535
查看次数