AS3中302重定向的跨域策略行为

时间:2013-04-27 20:09:54

标签: actionscript-3 flex flash-builder flash

我这些天已经抓了很多网,但是在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加载文件,一切都变得混乱!好吧,重定向完成了,正如预期的那样但突然之间我需要在重定向位置另一个跨域文件!

有什么解释发生了什么,最终解决了这个问题?!

谢谢你的时间!


它来自一个网站问题:我注意到在本地受信任的沙箱中完美无缺地工作,并且主要发生错误主要是在远程沙箱中。是否可能本地受信任的沙箱根本不关心跨域策略文件!?

1 个答案:

答案 0 :(得分:3)

<强>摘要

crossdomain.xml添加到每个CDN主机或采用限制Sound功能。

<强>详情

  1. SWF files that are assigned to the local-trusted sandbox can interact with any other SWF files and can load data from anywhere (remote or local).

  2. Sound可以从其他域that don't allow access using cross-domain policy with certain restrictions加载内容:

      

    某些处理声音的操作受到限制。一个数据   除非,否则不能通过其他域中的文件访问加载的声音   您实施跨域策略文件。声音相关的API下降   在这个限制下是Sound.id3,SoundMixer.computeSpectrum(),   SoundMixer.bufferTime和SoundTransform类。

  3. 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.