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