• お役立ち

【Flash / ActionScript3.0】gzip圧縮転送が設定されたWEBサーバ上でswfファイルからの外部テキスト読み込みに失敗した

  • このエントリーをはてなブックマークに追加
  • LINEで送る

弊社でお作りした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圧縮転送を外す」ということで問題解消しました。

星虹思械BRICOLEUR

関連コンテンツ