as3通过nocache的请求头信息禁止缓存无效
sshong 发表于2009年6月26日 10:21:00 更新于2009年6月26日 10:22:00
flash与服务器端http通讯,一直都有缓存问题,对于刷新度要求很高的通讯,是个很大的困扰。

这里不讨论服务器端做相关控制禁止缓存,只考虑flash端做相关控制来禁止缓存。

以往的解决方法就是在url后面加上个随机数或者当前时间来保证请求地址的唯一性。
如:
new URLRequest("http://127.0.0.1/1.txt?nocache=" + new Date().getTime());

as3中有个类URLRequestHeader,可以通过它向URLRequest添加http头信息。
文档里以及网络上也有通过此禁止缓存的说明,如
request.requestHeaders.push(new URLRequestHeader("pragma", "no-cache");
但是很不幸,经过测试,无效,照常缓存,而且我修改了1.txt的内容再去请求依然读取的是缓存中老的内容。
测试代码如下:
getbtn.addEventListener(MouseEvent.CLICK, onget);
function onget(evt:MouseEvent):void
{
    var header:URLRequestHeader = new URLRequestHeader("pragma", "no-cache");
    //var header:URLRequestHeader = new URLRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
    var req:URLRequest = new URLRequest("http://127.0.0.1/1.txt");
    req.requestHeaders.push(header);
    var loader:URLLoader = new URLLoader(req);
    loader.addEventListener(Event.COMPLETE, oncom);
}
function oncom(evt:Event):void
{
    txt.appendText((evt.target as URLLoader).data + "n");
}

测试环境:ie8、flash cs3、flashplayer9。
看来还是老老实实用随机保证唯一url把。如果你有好的方法也请告知。

ps:
如果有这么一个需求就是:先刷最新的服务器数据,刷不到(譬如服务器当掉了)时再读缓存该作何处理呢?
思路很简单,在loader加载带随机数url的error事件里load不带随机的url。
标签:as3 缓存 URLRequestHeader分类:As3&Flex阅读:8085
评论
celinexie2011年2月16日 16:03
有用post试过没,而不是用默认的get方法。
崇拜2009年12月18日 10:47
希望在不打扰你的前提下提供点信息到我的邮箱,谢谢
崇拜2009年12月18日 10:46
楼主,我想学习有限元分析,但是我对单元类型不是很了解,我想问下,你能不能告诉我通过什么书能知道单元格的类型及用途吗?跪求
添加评论
您的大名,限长10汉字,20英文(*)
电子信箱(*)
您的网站
正文,限长500汉字,1000英文(*)
验证码(*) 单击刷新验证码
联系我
博客订阅