关于asp.net 2.0使用了VaryByParam时在IE下的缓存问题

sxbyl 2006-01-07 12:03:23
最近用asp.net 2.0做一个项目,发现一个问题,当使用VaryByParam之后,页面在IE下根本不缓存,在请求同一页面的情况下,IE会再次请求完整的原页面,虽然服务器端已经缓存了,但是每次都返回完整的页面数据会增加不少流量,而且速度也会比较慢。不知大家有没有碰到过这种事情?

我的页面缓存描述:<%@ OutputCache Duration="86400" VaryByParam="id" %>
相关信息:
1.去掉VaryByParam后,一切正常,IE会缓存页面,再次请求页面会发送If-Modified-Since头
2.缓存在FireFox下一切正常,FireFox请求同样页面会发送If-Modified-Since头,服务器返回304 Not Modified
3.我定义的是VaryByParam="id",但服务器相客户端发送的http头是 Vary: *,是否正常?
4.我尝试使用VarBuCustom及相应代码替换VaryByParam,但是效果一样,即使设置了VaryByParam="none",服务器还是向客户端发送Vary: *

请大家给点看法,这个问题怎么解决,谢谢了!
...全文
476 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxbyl 2006-01-08
  • 打赏
  • 举报
回复
刚才又在网上看到这么一个帖子
http://dotnet247.com/247reference/msgs/28/143950.aspx

问题类似,也是IE客户端不缓存的问题。
sxbyl 2006-01-08
  • 打赏
  • 举报
回复
http://sxbyl.vicp.net/CacheTest/Default.aspx就是我新建的基于IIS 6的测试项目。新建一个新的Web项目,在页面顶部添加了<%@ OutputCache Duration="3600" VaryByParam="id" %>,页面的form部分添加了 <%=DateTime.Now %>,其他维持不变。

IE中不缓存这个页面,每次都是从服务器上重新获取一次缓存在服务器的页面。FireFox中正常。返回304 not modified.
sxbyl 2006-01-08
  • 打赏
  • 举报
回复
我在VMWare中访问这些网页和让我一个朋友从Internet上访问这个网页,也是一样的结果,IE不缓存页面,页面大小,创建时间和修改时间都不可用。而当VarByParam设置为none时缓存一切正常。我以前ASP.NET 1.1用VarByCustom解决的这个问题,我看了看服务器发送的http头,发送的是Vary: Accept-Encoding

刚才我又建了两个最简单的网站项目做了一个测试,一个是基于IIS 6的,一个是基于VS 2005自带的http服务器的(创建项目选用File System),其他不作修改,两个项目都是只增加<%@ OutputCache Duration="3600" VaryByParam="id" %>,在IIS 6的情况下,返回Vary: *,IE6不缓存页面,而在使用2005自带的http服务器的情况下,服务器没有返回Vary头,IE缓存一切正常。

我现在有两个疑问:
1、IIS 为什么会返回 Vary: *
我这个系统是最近才新装的Windows 2003,直接装的 VS 2005,没有改过IIS的默认设置。在我服务器端设置了VarByParam="id"后,IIS返回Vary: *是正常表现??为什么2005自带的http服务器会有不同结果?我感觉这个头很关键,两个服务器不应该随便有不同的结果吧。

2、当服务器返回Vary: *的时候,IE是不是就不在硬盘上保存这个页面了?
我尝试在Google上找了一下答案,没什么结果。

这真是一个很挠头的问题:(
非常感谢你对这个问题的关注!
saucer 2006-01-08
  • 打赏
  • 举报
回复
what happens if you change the setting to "every time I visit a page" ?

if your IE is not sending If-Modified-Since header, then there is something wrong with your IE's settings, try to access your site from users' machines

sxbyl 2006-01-07
  • 打赏
  • 举报
回复
我现在选择的就是自动。

以前用asp.net 1.1也碰到过这个问题,后来用VarByCustom解决了,但现在用VarByCustom都还是老样子……
saucer 2006-01-07
  • 打赏
  • 举报
回复
what is the setting under Tools->Internet Options->General, click on Settings button for "Check for newers version of stored pages"? try to select "Automatically"?
sxbyl 2006-01-07
  • 打赏
  • 举报
回复
IE 不发送 If-Modified-Since,下面是在已经第二次访问同一页面的http头信息

GET XXX HTTP/1.1
Accept: */*
Referer: XXX
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: localhost
Connection: Keep-Alive

-----------------------------------

HTTP/1.1 200 OK
Date: Sat, 07 Jan 2006 05:21:08 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: public, max-age=86388
Expires: Sun, 08 Jan 2006 05:20:57 GMT
Last-Modified: Sat, 07 Jan 2006 05:20:57 GMT
Vary: *
Content-Type: text/html; charset=utf-8
Content-Length: 18460

-------------------------------

response信息每次重新访问这个页面max-age会减小,其他字段不变

还有,在IE下浏览这些页面,页面大小,创建时间,修改时间都不可用,说明IE根本没有在硬盘上缓存页面。 FireFox下一切正常,郁闷:(
saucer 2006-01-07
  • 打赏
  • 举报
回复
sounds weird, does IE send If-Modified-Since header? if yes, what is the response from the server?
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧