Flash 缓存问题解决办法
2008年4月9日, 21:35
使用Flash请求资源的时候经常会碰到缓存的问题。这里分两种情况讨论:
1)被请求的资源是数据内容(XML或者JSON等文本数据)被缓存
比如:使用 URLLoader 请求一个 XML 数据 http://localhost/test.xml
这个时候在 IE 的缓存目录(通常在\Documents and Settings\{User}\Local Settings\Temporary Internet Files)产生一个与http://localhost/test.xml对应的缓存文件,用来保存test.xml返回的内容,以后每次请求URLLoader都返回这个文件内容。
Adobe 的知识库中有一个解决办法是给请求的资源加上一个随机数做参数:
loadVariables("mypage.asp?nocache=" + random(65000), 0, "POST");
myXML.load("path.xml" + "?" + Math.random());
看具体内容在这里。
如果能控制服务器的话,可以通过设定Http头的Cache-Control属性为no-cache来解决
response.setHeader("Cache-Control", "no-cache");
如果是Java Web App可以做一个filter专门来映射那些需要不被缓存的请求的资源,比如,在web.xml中做如下设定
<filter>
<filter-name>CacheControlFilter</filter-name>
<filter-class>net.nevillblog.flash.app.filter.CacheControlFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>/xml/*</url-pattern>
</filter-mapping>
2).swf文件本身被缓存
在 Adobe 的知识库谈到的解决办法是在HTML里面设定Expires参数和No-Cache参数,
具体内容看这里。
这个方法的不足之处是会导致整个html页面都会被重新请求,实际只要是SWF文件重新被请求。
我的解决办法是通过设置Apache的mod_expires,设定让SWF文件不被缓存,原理其实是相同的(即设定Cache-Control属性)。
在Apache的配置文件中设置如下代码:
ExpiresActive On
ExpiresByType application/x-shockwave-flash "now 1 seconds"
当然还要记得启用mod_expires即可。
分类: Experience | 1条评论 »
