最近用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: *请大家给点看法,这个问题怎么解决,谢谢了!

解决方案 »

  1.   

    sounds weird, does IE send If-Modified-Since header? if yes, what is the response from the server?
      

  2.   

    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下一切正常,郁闷:(
      

  3.   

    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"?
      

  4.   

    我现在选择的就是自动。以前用asp.net 1.1也碰到过这个问题,后来用VarByCustom解决了,但现在用VarByCustom都还是老样子……
      

  5.   

    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
      

  6.   

    我在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上找了一下答案,没什么结果。这真是一个很挠头的问题:(
    非常感谢你对这个问题的关注!
      

  7.   

    http://sxbyl.vicp.net/CacheTest/Default.aspx就是我新建的基于IIS 6的测试项目。新建一个新的Web项目,在页面顶部添加了<%@ OutputCache Duration="3600" VaryByParam="id" %>,页面的form部分添加了 <%=DateTime.Now %>,其他维持不变。IE中不缓存这个页面,每次都是从服务器上重新获取一次缓存在服务器的页面。FireFox中正常。返回304 not modified.
      

  8.   

    刚才又在网上看到这么一个帖子
    http://dotnet247.com/247reference/msgs/28/143950.aspx问题类似,也是IE客户端不缓存的问题。