相信有不少人会遇到浏览器缓存的问题,因为IE默认会缓存访问过的网页,特别是URL的参数是固定的,但是很可能内容会变化。
大部分都知道的可能是在head中增加meta信息:
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
而有文章指出这个依然有问题,如果网页内容超过32K,那么那个设置就实效了,所以要把它放到网页的最后:
<BODY>
网页内容。。。
</BODY>
<HEAD>
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
</HEAD>
</HTML>
现在AJAX很流行,而AJAX返回的内容很可能不再是一个完整的网页,那么就不能使用上述的方法,有另外的文章说到可以使用服务器端的HTTP头控制,我试验的结果是无效:
response.setHeader("Cache-Control","no-cache");
response.setHeader("Cache-Control","no-store");
response.setHeader("Cache-Control","must-revalidate");
最后采取的方法就是在使用AJAX发送请求的时候附加一个时间戳:
var xmlhttp = createrequest();
xmlhttp.open("GET",appendTimestamp(url),true);
function appendTimestamp(url)
{
if (url.indexOf("?")>0)
{
return url+"&ajax_time="+new Date().getTime();
} else
{
return url+"?ajax_time="+new Date().getTime();
}
}
当然这个方法也只能解决部分问题,如果URL太长也不行。
更新:
对于AJAX的情况,也可以使用
xmlhttp.setRequestHeader("Cache-Control","no-cache");
推荐另外一个日志:再论怎么有效利用浏览器缓存之怎么避免浏览器缓存静态文件。
2007年2月28日更新:
使用服务器端控制AJAX页面缓存:
response.setHeader( "Pragma", "no-cache" );
response.addHeader( "Cache-Control", "must-revalidate" );
response.addHeader( "Cache-Control", "no-cache" );
response.addHeader( "Cache-Control", "no-store" );
response.setDateHeader("Expires", 0);
单纯的使用 xmlhttp.setRequestHeader("Cache-Control","no-cache")无效。
发表评论