FlashPlayer10で外部swfのロードに失敗する件

2008/10にFlashPlayer10が正式リリースされました。

Flashの動作に若干変更が加えられたようで、バイト先のWebサイトで今まで正常動作していたFlashがFlashPlayer10では動かないという問題が起きました。

挙動を調べてみると、MovieClipLoader.loadClipで外部swfのロードに失敗してます。

外部swfとして指定するURLは実際にはPHPファイルを指しており、GETパラメータを変えることで
PHPファイルが出力するswfデータが変わるようになってます。

どうも、PHPファイルがswfデータを出力する際に指定してるHTTPレスポンスヘッダが良くないようなので、調べてみるとContent-disposition 指定がswfロードに失敗する原因でした。

そこで、下記のようにContent-dispositionの指定をコメントアウトしたら、FlashPlayer10でも
外部swfのロードに成功しました。
[PHP]

[/PHP]

Content-dispositionの仕様はRFCで規定されています。その内容については、こちらによくまとめられています。
以下、一部引用

Content-Disposition レスポンスヘッダフィールドは、ユーザがその内容を
ファイルに保存したい場合にオリジンサーバが既定のファイル名を提案する事を
意味するように勧告されている。

Adobe的には、Flashでロードするswfコンテンツに、ファイルを保存する場合に指定するフィールドを指定するなってことなんでしょうかねえ。

その他FlashPlayer10の問題

FlashPlayer10になって、バージョン番号が1桁から2桁に増えたため、
バージョンチェックを適当に行うJavascriptを書いているサイトなどでは、
FlashPlayer10をFlashPlayer1と勘違いして、Flashが表示されない問題が起きてるようです。
http://bakera.jp/ebi/topic/3302

・・・なんとなく2000年問題を思い出しました。

追記

Adobe公式のFlashPlayer10におけるセキュリティ上の変更点解説の中で、
Content-Disposition: attachment 指定されたswfに対する挙動を変えた理由が書いてありました。

不特定の人がファイルをアップロード/ダウンロードできるアップローダサイト等で、
信頼できないユーザによってアップロードされたswfが、そのサイトドメイン上で実行される危険性を
なくすためだそうです。

画像やxmlファイルなどは、Content-Disposition: attachmentがHTMLレスポンスヘッダに
ついていても、今までと同様に動作するそうです。