Asp.net mvc 4 mvc 4捆绑和缩小-刷新时未获得304(未修改)

Asp.net mvc 4 mvc 4捆绑和缩小-刷新时未获得304(未修改),asp.net-mvc-4,bundle,minify,http-status-code-304,asp.net-optimization,Asp.net Mvc 4,Bundle,Minify,Http Status Code 304,Asp.net Optimization,我正在通过System.Web.Optimization尝试MVC4beta的捆绑和缩小功能。我希望我使用它的站点在我点击刷新时会收到304(未修改) 我认为src对我的js包,/desktop js bundle?v=d33jhbml9lhkxspbj1tfrkri0lheyvmbsmqd59bxhg1(使用该版本)的意义在于,只有当服务器上的包中的一个文件被修改时,版本才会改变。然而,每次我点击刷新并监视Chrome F12中的网络选项卡时,它都会发出一个具有相同版本号的请求,并获得一个20

我正在通过
System.Web.Optimization
尝试MVC4beta的捆绑和缩小功能。我希望我使用它的站点在我点击刷新时会收到
304(未修改)

我认为src对我的js包,
/desktop js bundle?v=d33jhbml9lhkxspbj1tfrkri0lheyvmbsmqd59bxhg1
(使用该版本)的意义在于,只有当服务器上的包中的一个文件被修改时,版本才会改变。然而,每次我点击刷新并监视Chrome F12中的网络选项卡时,它都会发出一个具有相同版本号的请求,并获得一个
200
状态

为什么它不返回304?,这将减少负载并提高性能。谢谢

为什么它不直接返回304

因为当你点击F5时,你的浏览器的缓存就过期了。基本上你的测试是有缺陷的。您应该将指向此捆绑包的链接放在不同的页面中(使用
标记)。然后,您应该使用超链接导航到这些页面。现在观察
网络
选项卡

还要确保您在发布模式下运行


更新:

好的,再挖一点,我发现了。200 HTTP状态码确实总是被发送,这是正常的。但是第二次从缓存中提取包时

这是第一个请求:

我们可以看到,在本例中,捆绑包来自具有HTTP缓存响应头的服务器

这是第二个要求:

在第二个屏幕截图中,我们可以清楚地看到捆绑包是从缓存中提供的。请注意整条线是如何变灰的。HTTP 200状态代码是虚构的=>客户端甚至不向服务器发送HTTP请求,因为它直接从缓存检索捆绑包

我可以在谷歌浏览器上看到同样的情况

对于第一个请求:

对于第二个请求:


我也遇到了同样的问题,问题出在Microsoft.AspNet.Web.Optimization包上。如本文所述:,版本1.1.2-1.1.3受到影响降级到1.1.1后,它工作正常,刷新后未更改的资源返回304

您可以在Package Manager控制台中使用以下命令执行此操作:

PM> Uninstall-Package "Microsoft.AspNet.Web.Optimization"
PM> Install-Package "Microsoft.AspNet.Web.Optimization" -Version 1.1.1

但是当它请求一个js文件时,它返回了一个304,这个js文件在包之外。所有图片都是304。@IanDavis,你是在发布模式下运行吗?IIRC捆绑包仅在发布模式下缓存。我怎么知道?这是在我完成了在Visual Studio中设置的一键式发布之后,然后,我访问生产中的站点并点击“刷新”以查看
200
(不是
304
)。您的web.config中是否有
?通常情况下,如果您已在发布模式下发布您的站点,则应该是这样。还可以尝试我的建议:使用链接在包含相同捆绑包脚本的页面之间导航,以查看是否仍有200个。我发布的web.config中有
。我想知道为什么VisualStudio会这样做。而且,我确实尝试了在具有相同脚本ref的页面之间导航-仍然是200。让我试试web.config更新。同时,有人知道为什么VisualStudio会这样做吗?我错过了一个场景吗?