flash跨域名动态加载数据
以前开发的一个页面功能是由flash实现的,考虑到用户体验的连续性,flash与后台的交互不能通过普通的getURL的方式实现(否则每次交互都会导致页面刷新,用户体验很差),而必须用AS里面的LoadVars类来实现动态加载。
通常活动开发的相关flash会放在html/.../promote目录下面(对应promote域名),而cgi会放在cgi-bin/service目录下面(对应service域名)。结果发现这个flash总是加载不到cgi输出的信息。把cgi移到cgi-bin/promote目录(对应promote域名),flash就可以加载到cgi的输出信息。看apache日志也发现:cgi放在promote目录,就有HTTP请求;cgi放到service目录,则flash居然连访问cgi的请求包都没发送。很奇怪。
通过HTTP Watch仔细对比两种情况下的请求,发现后者多了下面这个请求:
通常活动开发的相关flash会放在html/.../promote目录下面(对应promote域名),而cgi会放在cgi-bin/service目录下面(对应service域名)。结果发现这个flash总是加载不到cgi输出的信息。把cgi移到cgi-bin/promote目录(对应promote域名),flash就可以加载到cgi的输出信息。看apache日志也发现:cgi放在promote目录,就有HTTP请求;cgi放到service目录,则flash居然连访问cgi的请求包都没发送。很奇怪。
通过HTTP Watch仔细对比两种情况下的请求,发现后者多了下面这个请求:
00:00:00.231 0.525 521 GET 404 text/html: charset=iso-88... http://service.paipai.com/crossdomain.xml
看看名字,估计就是flash对跨域加载数据作了安全性限制。baidu一番以后,在html/.../service目录添加crossdomain.xml文件,内容如下:
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*.paipai.com" />
</cross-domain-policy>
<cross-domain-policy>
<allow-access-from domain="*.paipai.com" />
</cross-domain-policy>
这个xml文件的格式很简单,就不多解释了。加了这个文件以后,LoadVars类就可以从paipai.com的任何一个子域名访问到service域名的cgi了。
如果不希望所有cgi都能随便访问,那么需要再作精细化配置,诸位可自行研究。