ASP.NET MVC3的一个OutputCache问题
来源:互联网 发布:c语言图形编程技术 编辑:程序博客网 时间:2024/05/23 11:16
在 ASP.NET MVC 3 中如果使用了 OutputCache,一定要在 Action 中添加下面的代码,切记!
Response.Cache.SetOmitVaryStar(true);
这是一个伴随ASP.NET从1.0到4.0的OutputCache Bug,ASP.NET MVC 3 是基于 ASP.NET 4.0 的,所以也躲不过。
问题演示
下面先来体验一下不加 Response.Cache.SetOmitVaryStar(true); 的情况。
示例Action代码:
[OutputCache(Duration = 120)]public ActionResult SiteHome(int? pageIndex){ ...}
注:OutputCache.Location的默认值是OutputCacheLocation.Any(服务端、客户端、代理服务器端等都进行缓存)
第一次请求:
第二次请求(F5刷新浏览器):
接着第四次请求会返回304,第五次请求又返回200。。。
再体验一下加 Response.Cache.SetOmitVaryStar(true); 的情况。
[OutputCache(Duration = 120)] public ActionResult SiteHome(int? pageIndex) { Response.Cache.SetOmitVaryStar(true); ... }
第二次请求(F5刷新浏览器):
第三次请求(F5刷新浏览器):
注:只要在缓存有效期内,服务器一直返回304。
问题分析
1. 200与304的区别
当返回状态码是200时,服务器端会将当前请求的整个页面全部发送给客户端(消耗下行带宽)。
当返回状态码是304时,由于客户端浏览器提供的 Last-Modified 时间在服务器端的缓存有效期内,服务器端只发送这个状态码,不发送页面的任何内容(几乎不消耗下行带宽),浏览器直接从本地缓存中获取内容。
所以,304的好处就是节约带宽,响应速度更快。
2. 对服务端缓存的影响
加不加 Response.Cache.SetOmitVaryStar(true),服务端的缓存情况都是一样的。只是不加 SetOmitVaryStar(true) 时,对于同一个客户端浏览器,每隔一次请求,服务器端就不管客户端浏览器的缓存,重新发送页面内容,但是只要在缓存有效期内,内容还是从服务器端缓存中读取。
- ASP.NET MVC3的一个OutputCache问题
- 注意!ASP.NET MVC 3 的一个 OutputCache 问题
- ASP.NET MVC 3 的一个 OutputCache 问题
- 注意!ASP.NET MVC 3 的一个 OutputCache 问题
- 注意!ASP.NET MVC 3 的一个 OutputCache 问题
- [Asp.Net] OutputCache
- ASP NET MVC OutputCache
- Pro ASP.NET MVC3--创建SportStore例子的一个问题解决
- .net的OutputCache祥解
- ASP.NET MVC3 ModelState.IsValid为false的问题
- ASP.net 中 OutputCache 指令各个参数的作用
- [备]ASP.net 中 OutputCache 指令各个参数的作用。
- ASP.net 中 OutputCache 指令各个参数的作用
- ASP.net 中 OutputCache 指令各个参数的作用
- IIS7 ASP.NET MVC3.0 部署问题
- ASP.NET MVC3 DropDownList 验证问题
- ASP.NET 页面指令 之 @OutputCache
- asp.net mvc源码分析-OutputCache
- 使用Nexus搭建Maven内部服务器
- 媒体遥控使用教程
- android override简介
- 矩阵的坐标变换
- Conversion to Dalvik format failed: Unable to execute dex: java.nio.BufferOv
- ASP.NET MVC3的一个OutputCache问题
- 關於如何快速切換目錄(Linux)
- beaglebone black的串口连接、用usb联网、内核模块的本地编译
- 学习汇编前你应该知道的知识
- 黑马程序员——努力每天奋斗中。。。
- 浅析ARC
- jQuery:hasClass() 方法检查被选元素是否包含指定的 class;after()在某元素之后插入新元素
- Displaying Chinese in minicom
- MTK adb 进入工程模式