
弊社でお作りしたFlashコンテンツを含む某ウェブサイトがドメイン名の変更と常時SSL化を伴うサーバの変更(移転)を行ったところ「Flashコンテンツが読み込まれない」というご連絡をいただきました。
ドメイン名変更や常時SSL化に伴う対応を済ませたファイルは納品済み。ファイルのアップロード漏れなども特に無い様子。テストサーバでは動作する。でも本番環境では確かに読み込みの途中で止まってしまう。
「むむむ」と思ってブラウザの開発者ツールの画面とにらめっこをしていたところ、読み込んでいるxmlファイルのファイルサイズが違う!
「あれ?古いバージョンのファイルをアップロードしてる?」と思ってファイルの中身を確認するも、どちらも確かに最新のファイル。
・・・と、ここで「サーバ側で圧縮かかってる?」と思いたち、開発者ツールで確認すると・・・
Content-encoding: gzip
・・・やっぱり。
試しにテスト環境でも以下の記事を参考にgzip圧縮転送を設定してみました。
gzip 圧縮によるサイトパフォーマンスを向上させる方法 | murashun.jp
今回は mod_deflate モジュールを使った方法を採用して設定。
SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico)$ no-gzip dont-vary Header append Vary User-Agent env=!dont-vary
アクセスしてみると、ファイルの読み込みが途中で止まってしまいました。ビンゴです。
調べてみると、古い(2010年)記事ですが、似たような事例がありました。
試験管のなかのコード :: Flash on IE6 は gzip 圧縮されたデータを読み込めない
今回の事例では不具合が発生していたのはChromeにバンドルされたFlashPlayer(IE11やEdgeはむしろ問題なく読み込めた)でしたが、発生している現象自体は全く同じでした。
ただ、「gzip圧縮転送したWEBサーバ+URLLoader.load()
」の組み合わせが常にNGというわけではないようです。実際、ごくごくシンプルな構成のファイルを作って検証したら、gzip圧縮転送環境下でも問題なく読み込まれていました。読み込むxmlデータの量なのかURLLoader.load()
前後の処理の問題なのか、発生条件の詳細は不明です…。
結局今回は前述の参考記事中にも記載があったように、「swfコンテンツ配下のディレクトリのみgzip圧縮転送を外す」ということで問題解消しました。