FlexのURLLoaderでIE6だけ「#2032: ストリームエラー」 原因はgzip?

見事にはまったよ

けど

一応、解決したよ

はまり現象

第13回 Flexが備えるサーバー連携API(Part1:Flash系パッケージ)(2ページ目) | 日経 xTECH(クロステック)

↑のようなことをしたけど、IE6だけ「IO_ERROR」が出ちゃう人が参考にするといいかも

ローカル環境のIEは大丈夫だけど、UPすると駄目になっちゃう人もいいかも?

URLLoaderじゃなくてlastResultとかのHTTPアクセスではまってる人も同じ現象かと


一番の問題はURLLoader.load()したあとに戻ってくるデータのレスポンスヘッダーにあるみたい
(lastResult使ってる人の場合は「HTTPService.send()」のあとのレスポンスヘッダー)

はまり脱出への調査

とりあえず色々調べた結果、短い文字列を取得(URLLoader.load())した場合、

HTTP/1.1 200 OK
Date: Tue, 09 Jun 2009 08:27:55 GMT
Server: Apache
X-Powered-By: ModLayout/3.2.1
Cache-Control: no-cache
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html

こんな感じのヘッダーが返ってくるけど、ある程度長い文字列を取得しようとすると

HTTP/1.1 200 OK
Date: Tue, 09 Jun 2009 08:26:30 GMT
Server: Apache
X-Powered-By: ModLayout/3.2.1
Cache-Control: no-cache
Connection: close
Content-Type: text/html
Content-Encoding: gzip
Content-Length: 960

こんな感じにヘッダーが返ってくる

ここでポイントなのは

Content-Encoding: gzip

この人

この人はどうやら「僕gzip圧縮されて返ってきました」っていうヘッダーらしいんだけど、どうやらURLLoaderで取得した場合はgzip圧縮されたデータを解釈(解凍?)できないみたい. そんな人僕は召還した覚えがないんですが、このヘッダーの制御はレンタルサーバー(XREA Free)のapacheで設定されているっぽいんですね

この人が帰ってきた場合はほぼ間違いなく「#2032: ストリームエラー」になります

firefoxとかoperaは大丈夫なんですけどね、なんなんですかねIE6は

※蛇足:この「Content-Encoding」は「Accept-Encoding」という送信ヘッダーによって制御されているみたい. これもapacheの設定らしく僕のレンタルサーバー上では「HTTP_ACCEPT_ENCODING gzip, deflate 」となっています. これは変更できないんだろうか? まあいいや

はまり脱出への方法

なので.htaccessを使用してgzip圧縮されないようにしました

<ifmodule mod_gzip.c>
    mod_gzip_on no
</ifmodule>

↓ここ参照
FLASH-JP.COM - フォーラム

このスレッドをさっさと見つけてればはまらなかったかもしれない

はまりへのまとめ

flash(swf)はブラウザ依存しないと思ってたけど、どうやら環境によっては依存してしまうこともあるらしい

やはり主要ブラウザでの確認は必須であることがわかった

またヘッダーについて色々調べてたから勉強になった部分も多く、結果的に得るものはあったかもしれない

まあこれでflexとサーバ連携したサービスが作れる土台が出来たのでよかった