解决方案 »

  1.   

    最后这句是你自己瞎猜的。要想不瞎猜,学会 http 调试测试。当你使用任何一个http 调试器去看你的“再刷新这个页面”动作时,你能够看到 200 和 304 的区别。
      

  2.   

    asp.net有个严重的问题,就是默认不支持 304 状态。你只能“手动”去设置这个状态。所以,asp.net网站往往是看起来很慢,难以优化。
      

  3.   


    也就是说,如果js的缓存有效期是60分钟,但是下载30分钟后,服务器端发生了变化,js文件的内容变了。
    这是如果刷新浏览器的页面,是不会重新load这个js文件的对吗?
      

  4.   


    200是重新成功下载了文件,304是使用了缓存文件。 那么过期的JS文件浏览器是怎么处理的呢?难道不是覆盖么???还有那个ASP.NET网站手动设置304,是怎么设置?
      

  5.   

    管理机制缓存网页的多个版本
     public Album am = new Album();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.Params["Card"] != null)
            {
                string name = Request.Params["Card"];
                string strsql = "select * from tb_employee07 where 身份证号码=" + name;
                DataSet ds = am.GetDataSet(strsql, "tb_employee07");
                GridView1.DataSource = ds;
                GridView1.DataBind();
            }
            //根据Country参数来进行网页的多个版本缓存
            Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
            Response.Cache.SetCacheability(HttpCacheability.Public);//设置Cache-Control HTTP标头,以实现控制文件如何在网络上进行缓存
            Response.Cache.SetValidUntilExpires(true);//指定ASP.NET缓存是否应该忽略使缓存失效的客户端所传送的Cache-Control HTTP标头
            Response.Cache.VaryByParams["Card"] = true;
        }
      

  6.   

    谢谢,收藏了。还有,这个问题,也就是说,如果js的缓存有效期是60分钟,但是下载30分钟后,服务器端发生了变化,js文件的内容变了。
    这是如果刷新浏览器的页面,是不会重新load这个js文件的对吗?
      

  7.   

    当然不会。这个asp.net代码不是服务器端缓存机制。
      

  8.   

    如果文件下载时需要经过你的asp.net程序处理,例如你做了什么“url重写”设置,或者你控制下载权限,或者你自动根据客户端的设备而下载不同的文件,或者就是普通的“查询数据库-产生输出html内容”的下载,你其实都应该注意使用304状态。所有浏览器都会支持 If-Modify-Since 和 If-Modify-Match 两种机制。但是基本上asp.net程序员都是以“输出内容”为目的,很少考虑是否应该返回给客户端 304 状态的问题。如果客户端每一次刷新页面都有好几个或者几十个请求要经过你的服务器,如果不支持304状态的机制,会让你的网站看起来甚至慢10倍。
      

  9.   

    像js文件、图片(例如地图上背景瓦片)文件、其它各种相对比较“静态”的文件,这些如果经过你的应用程序处理,并且是asp.net程序,那么十有八九可能没有处理这个服务器端缓存,需要修改你的程序。而如果是IIS直接处理的,那么你可以用一个http调试器程序看一下,看看你的IIS有没有正常地返回304状态。如果Response是200状态,那么需要重新设置你的IIS。这是很重要的网页优化措施。
      

  10.   

    也就是说,如果js的缓存有效期是60分钟,但是下载30分钟后,服务器端发生了变化,js文件的内容变了。
    这是如果刷新浏览器的页面,是不会重新load这个js文件的对吗?是的 不会重新load解决方法是 但修改了js内容后 修改一下webconfig
    js?v=<%=ConfigHelper.JsVerson%>  <appSettings>
        <add key="JsVerson" value="1.0.0.1"/>
      </appSettings>看看淘宝 京东的页面上的js吧~
      

  11.   


    但是在修改了css文件内容后, 按ctrl+F5,请求是200,但css文件内容还是没变是怎么回事呢?
      

  12.   


    修改了Web.config之后,网站就会重启。但是为什么重启后浏览器就会重新load这个js呢,是服务器端不上淡出的返回了304代码,而是返回了一些什么额外的消息么?
      

  13.   

    如果服务器端返回200,可能是文件修改了(尽管内容没有修改,但时间修改了也一样算是修改了),或者你的IIS没有正确设置。所以看缓存机制是否出现故障,要监视一下相应的文件下载时是200还是304,然后调整服务器端的各种系统。
      

  14.   


    修改了Web.config之后,网站就会重启。但是为什么重启后浏览器就会重新load这个js呢,是服务器端不上淡出的返回了304代码,而是返回了一些什么额外的消息么?abc.js?v=1.1
    abc.js?v=1.2
    视为不同的请求
      

  15.   


    这个跟服务器端缓存无关。如果你网站上有上万、数十万的下载内容可能与自动化缓存有关,你不可能每隔几秒钟都去重新发布一次服务器系统。而且就算是每隔几秒钟重新发布一下,也不是及时地和自动化地处理缓存。只是在要求很低时手工干一点点活儿。上面代码的时候是通过修改js文件的url来使浏览器更新文件我没有说服务器端缓存
    修改了Web.config之后,网站就会重启。但是为什么重启后浏览器就会重新load这个js呢,是服务器端不上淡出的返回了304代码,而是返回了一些什么额外的消息么?浏览器是缓存url的对应的资源~ 我们平时图片被缓存了 是因为图片的url一直没有变
    <img src="~/images/img.png?@(DateTime.Now.Ticks)" @是mvc的语法
    这样的话 图片的url会一直变~ 那么每次都会请求新的~这是浏览器对url的机制,当然你可以在服务端在http的请求头上告诉浏览器不要缓存~
    是服务器端不上淡出的返回了304代码,而是返回了一些什么额外的消息么?
    url的不同会让浏览器重新加载是浏览器的 和服务端无关