none
IE缓存验证 RRS feed

  • 问题

  • 如果a.aspx设置了网页缓存且缓存未过期,以下几种情况ie如何处理。
    (1)a.aspx未改变;
    (2)a.aspx已经改变;
    在ie输入a.aspx后,ie如何验证a.aspx已经更新?如何处理?
    2009年4月8日 3:09

答案

  • 服务器在缓存网页时,会在缓存的内容上加上一个时间戳,标明过期的时间。收到请求,会判断此请求与缓存的时间戳对比
    孟宪会
    2009年4月13日 9:52
    版主

全部回复

  • 你好,

    我理解如下:
    1.当a.aspx未发生改变时,服务器不会发送到客户端,客户端调用缓存输出
    2.已经改变了,服务器端会重新发送数据到客户端,客户端重新呈现。

    关于你说的IE如何验证a.aspx是否已经更新,如何处理。
    据我掌握的资料看,应该在服务器端有一个标志用来标记服务器端的页面是否发生更新,如果更新则为true。
    这时当客户端请求页面的时候根据这个标志位来决定是否重新输出到客户端。

    关于asp.net缓存方面的知识可以参考下面的链接。

    ASP.NET Caching
    Microsoft Online Community Support
    2009年4月10日 3:28
  • 我希望知道的正式服务器如何判断网页是否已经改变。按下面的流程:
    (1)浏览器请求a.aspx
    (2)服务器接收到请求,判断网页是否改变,如果改变,把改变后的网页发给客户端,否则发送304.

    我的问题就是:服务器如何 判断网页是否改变,有算法就好了。
    2009年4月13日 8:31
  • 服务器在缓存网页时,会在缓存的内容上加上一个时间戳,标明过期的时间。收到请求,会判断此请求与缓存的时间戳对比
    孟宪会
    2009年4月13日 9:52
    版主
  • 时间戳并不能解决这个问题:
    比如一个用户系统,现在有3个用户,userList.aspx显示所有用户,设置过期时间=2000s,在时刻T=a时,浏览者S第一次请求userList.aspx,在T=a+500时刻,有一个用户注册(现在又4个用户了),在T=a+1000时刻,S再次请求userList.aspx,此时并未过期,但是任然会重新获取数据。除了判断过期外,还应该判断网页的数据(html文本是否改变),我想知道iis是如何判断(html是否改变)的。
    2009年4月14日 1:53
  • 服务器端的就一个,不会是一个用户一个的。除非特别声明。
    客户端缓存可以不同,

    你可以使用下面的代码测试,在2分钟之内,在不同的机器的ie上访问,得到的时间显示是一样的,并不是你当前的时间

    <%@ Page Language="C#" %>  
    <script runat="server">  
      protected void Page_Load(object sender, EventArgs e) 
      { 
        	Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache);
            Response.Cache.SetExpires(DateTime.Now.AddSeconds(120));
            Response.Write(DateTime.Now.ToString());
      }
    </script> 

    浏览器请求页面的过程是:浏览器先检查本地是否有没有过期的缓存存在,如果有,就直接取本地数据,如果没有,请发送请求,iis检查服务器端是否有缓存(包括iis压缩版本),如果有,就直接输出缓存,如果没有,就将请求队列排队,等待asp.net进程处理,asp.net还可以通过代码进行缓存,asp.net代码是认为控制的,与本问题的性质不同。

    孟宪会
    2009年4月14日 3:32
    版主