如何避免网站使用本地缓存的JavaScript文件?

如何避免网站使用本地缓存的JavaScript文件?,javascript,asp.net,caching,web,Javascript,Asp.net,Caching,Web,朋友们 最近,我在客户端托管了一个网站(使用ASP.Net开发),其中包含许多用于丰富UI交互的JavaScript内容。一切正常。但主要问题是-- 当我在JavaScript文件中做一些更改并上传它时,它不会在客户端生效,因为那里的网站使用本地缓存的JavaScript文件 那么,我怎样才能避免这种情况呢 有什么技术可以解决我的问题吗?有一些技术,比如避免浏览器使用缓存过期来缓存资源 protected void Application_BeginRequest() { //NOTE: S

朋友们

最近,我在客户端托管了一个网站(使用ASP.Net开发),其中包含许多用于丰富UI交互的JavaScript内容。一切正常。但主要问题是--

当我在JavaScript文件中做一些更改并上传它时,它不会在客户端生效,因为那里的网站使用本地缓存的JavaScript文件

那么,我怎样才能避免这种情况呢


有什么技术可以解决我的问题吗?

有一些技术,比如避免浏览器使用缓存过期来缓存资源

protected void Application_BeginRequest()
{
  //NOTE: Stopping IE from being a caching whore
  HttpContext.Current.Response.Cache.SetAllowResponseInBrowserHistory(false);
  HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
  HttpContext.Current.Response.Cache.SetNoStore();
  Response.Cache.SetExpires(DateTime.Now);
  Response.Cache.SetValidUntilExpires(true);
}
但对于您的情况,这是不可取的,我假设您的项目处于开发阶段,为了避免资源被重新加载、缓存资源被删除并再次加载,您不应该实施此补救措施,因为这会降低您的站点性能


更简单、更合理的解决方案是告诉您的客户进行合作,并在他们希望看到站点最近的更改时按
cntrl+F5
,之后,当站点完成时,将不再需要这样做,或者,您可以只在开发阶段实现上述给定代码,并在使您的站点生效之前将其删除

经过一番研究,我们得出了下面的标题列表,似乎涵盖了大多数浏览器:

  • :1997年7月26日星期一格林尼治标准时间05:00:00
  • :,私有,最大过期时间=0,后检查时间=0,预检查时间=0无存储
  • :没有缓存
在ASP.NET中,我们使用以下代码段添加了这些内容:

Response.ClearHeaders(); 
Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1
Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0 
Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.0 
可从以下地址找到:

上述解决方案来自。

在url末尾向js文件添加一些随机生成的数字/时间戳,如-


请参阅此答案中有关重新考虑缓存的说明:


将缓存视为您的朋友。

动态加载它,而不是使用
script
标记来加载Javascript

<script>
    function loadScript(name) {
        var s = document.createElement("script");
        s.src = name + "?" + (new Date).getTime();
        document.body.appendChild(s);
     }
     loadScript("script1");
     loadScript("script2");
 </script>

函数加载脚本(名称){
var s=document.createElement(“脚本”);
s、 src=name+“?”+(新日期).getTime();
文件。正文。附录子项;
}
加载脚本(“脚本1”);
加载脚本(“脚本2”);

他说问题在于服务器缓存,而不是客户端缓存。我又看到了这一点(ftp上传没问题,ftp下载得到了正确的文件,但http正在检索旧版本…仅适用于
.js
文件),这只是一个建议,上面给出的代码可以替代使用。