4

我尝试了MVC 4 Beta的捆绑和缩小,通过System.Web.Optimization。我希望我使用它的网站在刷新时会收到304 (Not Modified)mvc 4捆绑和缩小 - 当我刷新时没有得到304(未修改)

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

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

回答

3

为什么它不只是返回304?

因为当你点击F5你会过期浏览器的缓存。基本上你的测试是有缺陷的。您应该将链接指向不同的页面(使用<script>标签)。然后你应该使用超链接导航到这些页面。现在观察Network选项卡。

另外请确保您在发布模式下运行。


UPDATE:

OK,挖多一点这里是我发现后。 200 HTTP状态码确实总是发送正常。但是第二次从缓存中获取包。

这里的第一个请求:

enter image description here

我们可以看到,在这种情况下,一束来自于与HTTP缓存响应头的服务器。

而这里的第二个请求:

enter image description here

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

我可以在谷歌浏览器中观察同样的事情。

对于第一个要求:

enter image description here

而对于第二个请求:

enter image description here

+0

但它返回了304的时候它使我有管束外的js文件的请求。以及所有图像的304。 – 2012-03-21 12:46:30

+0

@IanDavis,你在Release模式下运行吗? IIRC捆绑包仅在发布模式下被缓存。 – 2012-03-21 12:48:36

+0

我怎么知道?这是在我在Visual Studio中完成一键式发布之后,然后我在生产环境中访问该站点并刷新以查看'200'(而不是'304')。 – 2012-03-21 12:49:40

1

我有同样的问题,这个问题是与Microsoft.AspNet.Web.Optimization包。如此处所述:http://aspnetoptimization.codeplex.com/workitem/127,版本1.1.2-1.1.3受到影响。 降级到1.1后。1它工作正常和304刷新后返回未更改的资源。

你可以用下面的命令做它在包管理器控制台:

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