请教一个超难的问题:一般网站的js文件会被缓存,不再下载,但如果改变了,又会下载,请问如何判断有没有被下载?我问这个问题是想用aspx模拟一个js文件,方法如下:
this.Response.ClearContent();
this.Response.ContentType = "text/javascript";
this.Response.Write(content);由于这个js文件很大,所以我不希望每次都被下载,只在第一次和有变化时才重新下载,请问该怎么做?多谢各位高手高手高高手!!!

解决方案 »

  1.   

    用静态的js文件举例,第一次下载时Response有一个Header叫做"modified"声明了此文件最后一次被更改的时间。之后客户端再遇到该文件而请求下载时,Request就会有一个Header叫做"if-modified-since",也就是“假如此时间后该文件被更改”,这项的时间值也就是上次下载时获得的时间值,同样是以服务器时钟为准的UTC时间。IIS这时候就会对比Request中的这个时间值与该文件的最后修改时间,然后决定返回整个js还是给一个返回代号表明无需更新。详细过程,你用fiddler之类的HTTP监听器,监听一下对静态js的请求,也就完全清楚了。
      

  2.   

    是够难,cat_hsfz(我的Blog在http://purl.oclc.org/NET/cathsfz) 说的,也没看明白
    -_—!!!
      

  3.   

    不知cat_hsfz兄做过动态js没有呢?
    我用cat_hsfz兄的方法看了一下,普通的js有if-modified-since属性,但动态的js没有这个属性。所以动态的js可能会每次下载。这样可不好。有没有什么办法让它不要每次下载呢?
      

  4.   

    我的意思就是让你手动加Header上去啊,Request.Headers中你可以获得Request发上来的Header;Response.AddHeader可以手工为Response添加特定的Header。