【问题标题】:How do I solve Error: [strict] Ignoring policy file at http://my.domain.com/crossdomain.xml due to bad Content-Type 'binary/octet-stream'?如何解决错误:[严格] 由于内容类型“binary/octet-stream”错误而忽略 http://my.domain.com/crossdomain.xml 上的策略文件?
【发布时间】:2011-03-25 09:39:23
【问题描述】:

这是一个 ActionScript 3 问题...

我在 my.domainA 上托管一个 swf,我正在从 my.domainB 请求一个 jpg(当然我在混淆域名),使用此代码:

var request:URLRequest = new URLRequest(result.image);
            request.requestHeaders.push(header);
   var context:LoaderContext = new LoaderContext(true, ApplicationDomain.currentDomain, SecurityDomain.currentDomain);
   content = new Loader();
   content.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
   content.load(request, context); 

域 B 有一个跨域 xml 文件,如下所示:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
  <cross-domain-policy>
  <allow-access-from domain="*" />
  </cross-domain-policy>"

但是,我收到此错误:

“错误:[严格] 忽略策略文件 my.domainB.com/crossdomain.xml 由于内容类型错误 '二进制/八位字节流'。请参阅 www.adobe.com/go/strict_policy_files 解决这个问题。”

有谁知道我该如何解决这个问题?这是 crosdomain.xml 文件还是我请求的 jpg 的错误内容类型?

任何帮助表示赞赏。

【问题讨论】:

    标签: flash actionscript-3 actionscript crossdomain.xml


    【解决方案1】:

    我从来没有遇到过这个问题,但该消息似乎表明问题在于跨域文件使用错误的内容类型(二进制/八位字节流而不是文本/xml)提供。你能检查一下吗?一种简单的方法是通过使用 firebug(或其他工具)查看响应标头来加载 xml。

    顺便说一句,您正在加载图像。可能您已经意识到这一点,但以防万一:如果您不需要操作图像像素数据,您可以在没有跨域的情况下加载它。只是不要尝试从中创建 BitmapData 图像,也不要访问 loader.content 。通过 loader 对象将图像放在显示列表上(或将其删除),这是一个显示对象,可以充当真实图像的“代理”。

    【讨论】:

    • crossdomain.xml 是工作正常的实时跨域 xml 的精确副本。但是,有效的方法不在 CDN 上。我想知道 Akamai 是否没有像您建议的那样正确提供服务。我意识到 jpg 不需要任何策略 - 我从 swf 切换到 jpg 以查看错误是否是由提供 swf 引起的。我需要和那个 swf 谈谈,所以不幸的是需要一个政策。我已经通过将所需内容(在本例中为“domainB”上的 jpg)切换到我们的一台服务器来证明该模型,并且代码运行良好,因此问题似乎与 CDN 相关。
    • 响应查看响应,查看从 firebug 的工作,获取跨域 xml 时没有报告错误,但是如果我查看响应,则那里什么都没有。 :-S
    • 我们或许可以设置代理服务器以从 CDN 获取内容,但如果费了这么大的力气却发现它也不起作用,那就太可惜了
    • @lukeluke。问题似乎不在于 xml 文件本身,而在于它的服务方式(错误的内容类型标头)。但是您说您看不到 crossdomain.xml 的任何内容。那可能就是问题所在。如果可能,我建议您联系 CDN 提供商,因为根据您的描述,似乎没有提供跨域服务或使用错误的标头提供服务。
    • @lukeluke。是的,将您的请求代理到 CDN 首先会破坏使用 CDN 的全部意义。因此,尽管它可能有效,但您不想走那条路。
    【解决方案2】:

    第一个猜测是您的跨域文件被拒绝,而不是 jpg。

    在您的代码中,我们看不到您的标头变量的内容...问题可能出在您的请求处理方式上吗?

    您是否尝试过更简单的方法? 就像是: var request:URLRequest = new URLRequest(result.image); var 内容:加载器 = 新加载器(); content.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded); content.load(request, new LoaderContext(true));

    【讨论】:

    • 抱歉我的错...我添加了 header 变量以尝试解决问题。我的原始代码是: var request:URLRequest = new URLRequest(result.image); var context:LoaderContext = new LoaderContext(true, ApplicationDomain.currentDomain, SecurityDomain.currentDomain);内容 = 新装载机(); content.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded); content.load(请求,上下文);我尝试将最后一行(如建议)替换为: content.load( request, new LoaderContext(true) );但可惜我仍然遇到同样的错误。
    • 我已将 crossdomain.xml 替换为另一个在实时项目中使用的副本,以消除任何潜在的编码问题,但仍然没有积极的结果。
    • 在控制台中出现错误后我确实得到了一个 *** Security Sandbox Violation *** 但我认为这是因为 flash 是“忽略 my.domainB.com/crossdomain.xml 中的策略文件到期错误的 Content-Type 'binary/octet-stream'" - 强调忽略。有时我希望 Flash 不那么严格!!!
    • 我还应该提到请求的内容托管在“内容交付网络”上,即 akamai
    • 我想知道 header 变量,因为错误似乎与 crossdomain.xml 的 Content-type 有关。有人会期望 application/xml 或 text/xml ......我假设 result.image 是你想要 laod 的 jpeg 的 url
    猜你喜欢
    • 1970-01-01
    • 2016-12-07
    • 2019-06-22
    • 2020-11-24
    • 1970-01-01
    • 2023-03-19
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多