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

3
我最近在爬取网络,但是没有找到关于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个回答

3

摘要

在每个CDN主机上添加crossdomain.xml或者采用限制Sound功能的方法。

详细信息

  1. 分配给本地可信沙箱的SWF文件可以与任何其他SWF文件交互,并且可以从任何地方(远程或本地)加载数据。

  2. Sound可以从其他域中加载东西,但存在某些限制,不允许使用跨域策略进行访问

    某些涉及声音的操作受到限制。除非您实现了跨域策略文件,否则无法通过来自不同域的文件访问加载的声音中的数据。受此限制的与声音相关的API包括Sound.id3、SoundMixer.computeSpectrum()、SoundMixer.bufferTime和SoundTransform类。

  3. 总的来说,Flash具有相当复杂的跨域策略,但在您的情况下,底线是您需要在每个主机上都有适当的crossdomain.xml,除了提供SWF的主机:

    3.1. 如果您的文件来自http://resource.domain.com,则不需要http://resource.domain.com/crossdomain.xml,但最好有一个

    3.2. 您需要适当的http://dyn2.domain.com/crossdomain.xml,明确允许您的SWF访问dyn2.domain.com,以便能够使用提供对原始加载数据访问的URLLoader和其他API。

    3.3. 这些限制是有原因的 - cookie(和其他环境用户凭据)。如果Flash在重定向后不需要适当的跨域,那么只需首先加载自己的重定向器即可从任何在您的浏览器中运行的SWF中访问附有用户cookie的任何域。 {{link5:这意味着可以从互联网上运行的任何SWF中访问所有受用户cookie保护的数据(例如mail.google.com)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接