我这些天已经抓了很多网,但是在302重定向的情况下无法获得有关crossdomain.xml文件行为的准确信息。特别是沙箱在最新版本中发生了显着变化!
我对flash来说比较新...所以任何建议都不仅仅是值得赞赏的!
我最近一直致力于一个项目,它使用带有某种CDN分发的音频流!会发生什么是触发了一个公共URL,然后用户被动态地重定向到下一个可用的最佳服务器。就我而言,我无法访问服务器端(至少不会很快)。提供适当的crossdomain.xml的唯一路径是执行重定向的路径。所有其他动态路径都只提供内容!
http://resource.domain.com (valid crossdomain.xml)
302 => http://dyn1.domain.com/...
302 => http://dyn2.domain.com/...
302 => http://dyn3.domain.com/...
我注意到如果我尝试使用类似的东西加载音频流,那么flash并不在乎。
var req :URLRequest = new URLRequest("http://resource.domain.com");
var sound :Sound = new Sound(req); // ie. effectively playing http://dyn3.domain.com
sound.play();
它既可以重定向,也可以很好地完成流式传输!并且不打扰任何跨域文件并开始播放!
虽然当我尝试不同的东西时,比如为请求设置一些自定义标头并使用URLStream加载文件,一切都变得混乱!好吧,重定向完成了,正如预期的那样但突然之间我需要在重定向位置另一个跨域文件!
有什么解释发生了什么,最终解决了这个问题?!
谢谢你的时间!
它来自一个网站问题:我注意到在本地受信任的沙箱中完美无缺地工作,并且主要发生错误主要是在远程沙箱中。是否可能本地受信任的沙箱根本不关心跨域策略文件!?
答案 0 :(得分:3)
<强>摘要强>
将crossdomain.xml
添加到每个CDN主机或采用限制Sound
功能。
<强>详情
Sound
可以从其他域that don't allow access using cross-domain policy with certain restrictions加载内容:
某些处理声音的操作受到限制。一个数据 除非,否则不能通过其他域中的文件访问加载的声音 您实施跨域策略文件。声音相关的API下降 在这个限制下是Sound.id3,SoundMixer.computeSpectrum(), SoundMixer.bufferTime和SoundTransform类。
Flash一般都很complex cross-domain policies,但在你的情况下,最重要的是你需要在每个主机上都有适当的crossdmain.xml
,但服务于SWF的主机除外:
3.1。如果您的文件来自http://resource.domain.com
,则不需要http://resource.domain.com/crossdomain.xml
,而是really good to have one。
3.2。您需要有适当的http://dyn2.domain.com/crossdomain.xml
明确允许您的SWF访问dyn2.domain.com
以便能够使用URLLoader
和其他提供对原始加载数据的访问的API。
3.3。这些限制有一个原因 - cookies(和其他环境用户凭证)。如果Flash在重定向后不需要正确的跨域,则可以通过首先加载自己的重定向器来访问附加了用户cookie的任何域。 This means accessing all user cookie-protected data (e.g. mail.google.com) from any SWF on the internet that's running in your browser.