有些网站在ASPX页面用以下链接的形式调用并合并多个CSS或JS文件,如果不加上版本号,用户浏览器缓存,怎么实现更新呢?
<link rel="stylesheet" type="text/css" href="http://css.test.com/styles?res=index.css,common.css"/>一般是加版本号,例如http://css.test.com/index.css?v=1这种形式来通知客户端更新,像上面的方式,如果不加版本号怎么通知客户端CSS文件更新了呢?

解决方案 »

  1.   

    if (!string.IsNullOrEmpty(context.Request.Headers["If-Modified-Since"]))
                {
                    DateTime IfModifiedSince = DateTime.Parse(context.Request.Headers["If-Modified-Since"]);
                    if (IfModifiedSince > Now)
                    {
                        context.Response.StatusCode = 304;//文件没有修改,继续使用旧文件
                        return;
                    }
                }其实看淘宝还有京东的实现 还是用版本号吧~
      

  2.   

    1.文件夹        /v250/index.css
    2.文件名        /indexv250.css
    3.参数         http://css.test.com/styles?res=index.css,common.css&v=250 
    4.禁止缓存你总得选一个
      

  3.   


    禁止缓存的话,结合ETAG是不是就可以有请求,但不会从服务器下载文件?
      

  4.   

    加版本号是最好的解决方案了~
    如果你觉得每个页面都要修改麻烦,可以
    http://css.test.com/index.css?v=<%=ConfigHelper.Version%>然后修改一下webconfig配置文件就可以了
      

  5.   

    比如说这个页面其中一个请求
    GET /www/images/pic_yjstitbg.gif HTTP/1.1
    Accept image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5
    Referer http://bbs.csdn.net/topics/390497328
    Accept-Language zh-CN
    User-Agent Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Touch; LENW8)
    Accept-Encoding gzip, deflate
    Host csdnimg.cn
    If-Modified-Since Fri, 14 May 2010 12:09:41 GMT
    DNT 1
    Connection Keep-Alive
    返回
    键 值
    响应 HTTP/1.1 304 Not Modified
    Content-Type image/gif
    Content-Length 2543
    Expires Fri, 18 Apr 2014 13:34:41 GMT
    Last-Modified Fri, 14 May 2010 12:09:41 GMT图片内容......
    这里,浏览器在提交的时候提交了参数If-Modified-Since,服务器就会返回 304消息。这用不着什么“版本号”。
      

  6.   

    如果你遇到问题,那么你应该根据原理去看看有什么深层次的问题,例如跟踪一下 If-Modified-Since 消息头到底是不是上一次由服务器发出的 Last-Modified 消息头。这里有个比较“微妙”的考虑。你是仅仅想自己修改一堆程序去弄几个url的“版本号”呢?还是想彻底解决一下你的web服务器为什么不能自动管理客户端缓存的问题呢?
      

  7.   

    如果你能一直以为“一般都这样做”,说明你可能身边一帮asp.net程序员搭档中至今还没有出现过一个愿意去了解web技术的开发人员啊。
      

  8.   

    如果你能一直以为“一般都这样做”,说明你可能身边一帮asp.net程序员搭档中至今还没有出现过一个愿意去了解web技术的开发人员啊。说的很好,现在就是想,如果不加版本号,是否能解决这个问题?
    有什么方法可以解决?麻烦给个提示,谢谢。
      

  9.   

    我已经给出提示 
    而sp1234也给出了虽然我的代码的目的是生成图片,要浏览器缓存起来,不要每次都获取,
    更你的需求相反。请研究下面三个参数If-Modified-Since
    Expires    Fri, 18 Apr 2014 13:34:41 GMT
    Last-Modified    Fri, 14 May 2010 12:09:41 GMTurl重写,或者HttpModule要每个请求都要经过asp.net处理
    那么就是在请求头判断,在响应头修改上面所说的三个参数
    一旦设置过期时间Expires小于现在,浏览器就会更新
      

  10.   

    例如阿里网站的
    https://a.alipayobjects.com/ar/??alipay.light.base-1.1.js,alipay.tracker-1.11.js这种怎么实现?
      

  11.   


    url重写还有阿里貌似自己实现一个框架~
    可能那个Url含2个js文件,但且只使用一次请求~
    在一次请求中下载2个js文件~mvc4 
    App_Start文件夹中的BundleConfig类
    也干了同样的事情~
      

  12.   


    url重写还有阿里貌似自己实现一个框架~
    可能那个Url含2个js文件,但且只使用一次请求~
    在一次请求中下载2个js文件~mvc4 
    App_Start文件夹中的BundleConfig类
    也干了同样的事情~
    在.NET,直接合并两个文件,再以text/css流输出也行吧,并且设置相应的缓存策略etag,last modified但有一个问题,在IE10中,设置了etag,last modified,如果直接回车再次访问同一个页面,css,js直接返回200 ok(from cache),这样也不会向服务器发请求,这种如何解决?