私は2つのサーバーを持っています。サーバーAは、私のオフィスでここに設定された外部からアクセスできる内部サーバーです。それにはRailsサーバーが実行されています。私は静的コンテンツ(画像、swf、javascript、cssなど)をすべて含んでいる第2のサーバー、Server Bを持っています。これはAmazon S3サーバーです。私はこれらすべてのファイルにパブリックアクセスを与えました。Amazon S3のFlash crossdomain.xmlを書く
私が試みているのは、サーバーAによって提供されるページにサーバーBのswfを置くことです。次に、表示するためにswfが必要とするその他のアセットは、サーバーBから動的にロードされます。しかし、残念ながら、それが失敗し、動的にロードされるように要求されたファイルは決して到着しません。
私のブラウザコンソールのエラーに基づいて、swfはcrossdomain.xmlファイルがサーバーAにあることを期待しています。thisに基づいて、私のS3サーバー上にあるものも必要です。ですから、私は2つのcrossdomain.xmlファイルを作成しました。各ファイルは各サーバーに1つずつあります。
これは、サーバーAのcrossdomain.xmlファイルです:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="*.server-a.com"/>
<allow-http-request-headers-from domain="*.server-a.com" headers="SOAPAction"/>
</cross-domain-policy>
はまた、私は明示的に私のサーバーBのcrossdomain.xmlファイルをロードしています:これは、サーバーBのcrossdomain.xmlファイルである
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="s3-bucket-name.s3.amazonaws.com" />
</cross-domain-policy>
swf:
Security.loadPolicyFile("https://s3-bucket-name.s3.amazonaws.com/crossdomain.xml");
ただし、私は何をしても機能しません。私は他に何をしようとしているのか分からない。私はここでいくつかの解決策を探してみましたが、私の問題をまだ解決できていません。確かに他の誰かがこれ以上の経験を私が持っていて、私にいくつかの指導を与えることができます。私はこの時点でかなりのアイデアを出しています。
更新 私の質問をいくつかの情報で更新します。
私は*に、両方のポリシーファイルを設定しようと、それがヒットするまで、それが仕事を始めた:
SecurityError: Error #2121: Security sandbox violation: Loader.content: s3.amazonaws.com/bucket_name/swfs/foo.swf cannot access s3.amazonaws.com/bucket_name/data/swfs/bar.swf. This may be worked around by calling Security.allowDomain.
はまた、私はチャールズを走ったし、それは私のローカルサーバの両方からのcrossdomain.xmlを引いているが、私はしないでくださいs3のためにそれを見てください。
アップデート2 私はローダにこれを追加してみました:
var context:LoaderContext = new LoaderContext();
context.securityDomain = SecurityDomain.currentDomain;
context.applicationDomain = ApplicationDomain.currentDomain;
Loader.load(new URLRequest(_dataFile), context);
これは、実際にダウンロードしたファイルになりました!残念ながら、今ではこれでアウトクラッシュ:私はcontext.applicationDomain = ApplicationDomain.currentDomain;
行が含まれていないが、それでも問題が解決していない/含む試してみた
SecurityError: Error #2119: Security sandbox violation: caller s3.amazonaws.com/bucket_name/swfs/MainSwf.swf cannot access LoaderInfo.applicationDomain owned by s3.amazonaws.com/bucket_name/data/swfs/foo/SecondSwf.swf
。 loader_.contentLoaderInfo.applicationDomain.getDefinition(def.a)
あなたはURLLoaderクラスを使用して、またはしていますか? (2)両方のファイルをdomain = "*"に変更し、何が起こるかを見てください。 (3)Charlesなどのローカルプロキシサーバーを実行し、ファイルが要求されているかどうかを確認します。 – Manish
1.ローダー; 2.これを試したところ、次のようになるまでロードが開始されました:SecurityError:Error#2121:セキュリティサンドボックス違反:Loader.content:http://s3.amazonaws.com/bucket_name/swfs/foo.swf httpsにアクセスできない: //s3.amazonaws.com/bucket_name/data/swfs/bar.swf。これは、Security.allowDomainを呼び出すことで回避できます。 – keybored
さらにチャールズを走らせて、両方のローカルサーバーからcrossdomain.xmlを取得していますが、s3では表示されません。 – keybored