3

这些天我在网上爬了很多次,但无法获得任何关于 crossdomain.xml 文件在 302 重定向情况下如何表现的准确信息;尤其是沙盒在上一个版本中发生了显着变化!

我对闪存比较陌生......所以任何建议都非常感谢!

我最近一直在做一个项目,该项目使用带有某种 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 加载文件,但一切都会变得混乱!好吧,重定向完成了,正如预期的那样,但突然间我需要在重定向位置中的另一个跨域文件!

对发生的事情以及最终解决此问题的方法有任何解释吗?!

谢谢你的时间!


它是一个站点问题:我注意到在本地受信任的沙箱中一切都可以正常工作,并且主要发生在远程沙箱中(如果不是仅在远程沙箱中)。本地受信任的沙箱是否可能根本不关心跨域策略文件!?

4

1 回答 1

3

概括

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

细节

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

  2. Sound可以使用具有某些限制的跨域策略从不允许访问的其他域加载内容:

    某些处理声音的操作受到限制。加载的声音中的数据不能被不同域中的文件访问,除非您实施跨域策略文件。受此限制的与声音相关的 API 是 Sound.id3、SoundMixer.computeSpectrum()、SoundMixer.bufferTime 和 SoundTransform 类。

  3. Flash 通常具有非常复杂的跨域策略,但在您的情况下,底线是您需要crossdmain.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 在重定向后不需要适当的跨域,则可以通过简单地首先加载自己的重定向器来访问带有用户 cookie 的任何域。这意味着从互联网上运行在您浏览器中的任何 SWF 访问所有受 cookie 保护的用户数据(例如 mail.google.com)。

于 2013-04-28T03:03:50.567 回答