2008.06.19 Thursday
ダウンロードできない <object>タグ 〜au Sシリーズの罠〜
「Flash がダウンロードできません><」
とある W32S ユーザからのサポートメール。
au端末には <object>タグを記述して Flash ダウンロードさせています。
Flashファイルが DocumentRoot 以下になく, 色々処理をさせるために download.php を介してファイル出力するような形式。
Flashファイルの場所は pathパラメータで URLエンコードして渡しています。
もちろん事前に複数の機種でダウンロードができることを確認済みです。
しかし検証チームに W42S で確認してもらったところ, ダウンロードできない現象が再現。
同じ Sシリーズ...これは怪しい。
とある W32S ユーザからのサポートメール。
au端末には <object>タグを記述して Flash ダウンロードさせています。
<object data="http://example.com/download.php?path=path%2Fto%2Fflash.swf"
type="application/x-mpeg" copyright="no" standby="ダウンロード">
<param name="disposition" value="devfl7z" valuetype="data" />
<param name="size" value="97061" valuetype="data" />
<param name="title" value="フラッシュ" valuetype="data" />
</object>
Flashファイルが DocumentRoot 以下になく, 色々処理をさせるために download.php を介してファイル出力するような形式。
Flashファイルの場所は pathパラメータで URLエンコードして渡しています。
もちろん事前に複数の機種でダウンロードができることを確認済みです。
しかし検証チームに W42S で確認してもらったところ, ダウンロードできない現象が再現。
同じ Sシリーズ...これは怪しい。
“まずはログより始めよ。”の格言通りアクセスログを確認。
正常にダウンロードできている他の端末と W32S のアクセスログを比較してみると...
・正常な端末
GET /download.php?path=path%2Fto%2Fflash.swf ... 200 97061
・W32S
GET /download.php?path=path%252Fto%252Fflash.swf ... 200 5
W32S のログが明らかにおかしい。
path パラメータが勝手に URLエンコードされているじゃないですか。
# urlencode('%') → %25
au の <object>タグの説明ページには data属性の正確な定義は記載されていませんが, パラメータを勝手に URLエンコードしてくれるとは大きなお世話(というかバグなんじゃ?)。
ざっと確認したところ, W32S〜W42S あたりの au Sシリーズ機種でこの現象が発生するようです。
私の W44S では発生しなかったことから, W43S か W44S で修正されたのでしょう...
pathパラメータがおかしくなっていたのでファイルがダウンロードできるはずがありません。
ファイルの場所を GETパラメータではなく, PATH_INFO で取得するように修正したら W32S, W42S でも正常にダウンロードできるようになりました。
au の <object>でのダウンロードの実装はご注意下さい。
携帯は機種毎にブラウザの実装が違うからホントーに厄介です。
携帯サイト開発ってバッドノウハウばかりたまっていくなぁ(´-`)
正常にダウンロードできている他の端末と W32S のアクセスログを比較してみると...
・正常な端末
GET /download.php?path=path%2Fto%2Fflash.swf ... 200 97061
・W32S
GET /download.php?path=path%252Fto%252Fflash.swf ... 200 5
W32S のログが明らかにおかしい。
path パラメータが勝手に URLエンコードされているじゃないですか。
# urlencode('%') → %25
au の <object>タグの説明ページには data属性の正確な定義は記載されていませんが, パラメータを勝手に URLエンコードしてくれるとは大きなお世話(というかバグなんじゃ?)。
ざっと確認したところ, W32S〜W42S あたりの au Sシリーズ機種でこの現象が発生するようです。
私の W44S では発生しなかったことから, W43S か W44S で修正されたのでしょう...
pathパラメータがおかしくなっていたのでファイルがダウンロードできるはずがありません。
ファイルの場所を GETパラメータではなく, PATH_INFO で取得するように修正したら W32S, W42S でも正常にダウンロードできるようになりました。
<object data="http://example.com/download.php/path/to/flash.swf"
type="application/x-mpeg" copyright="no" standby="ダウンロード">...
au の <object>でのダウンロードの実装はご注意下さい。
携帯は機種毎にブラウザの実装が違うからホントーに厄介です。
携帯サイト開発ってバッドノウハウばかりたまっていくなぁ(´-`)









Comments