JavaScript/ActionScriptで相互に会話 デプロイ時に実況中継するIRCボット
Feb 22

ども、amo-kです。

今回は、先日RIA的なアプリを作っていて遭遇した
問題について書きます。

IE × SSL × リソースDL

上記が重なった際に生じる問題です。
どうなるかといいますと、
HTTPレスポンスヘッダのキャッシュコントロール系で
意図した動作をしないという問題です。

例えば、

Pragma: no-cache

というレスポンスヘッダを定義していると
逆にcacheファイルを参照しようとするようです。

今回は、HTTPサーバ側でレスポンスの全てを構築していた訳ではありませんでした。
サーバサイドはphpアプリケーションでレスポンスヘッダ/メッセージボディを生成するのですが
phpはデフォルトでレスポンスヘッダを生成してくれます。
その際に

Pragma: no-cache

を入れてくれます。

これは嬉しいのですが、
上記IEのバグに対応するには、ヘッダを書き換える必要があります。
ということで以下のようにヘッダを上書きして対応しました。

header("Pragma: ");

一般的には、Webサイトの管理ツールなどで
SSL通信による集計ファイルのDLサービス等で
同様の現象が再現し得るでしょう。

JavaScriptじゃないんだし、
phpソースコード中にIEの対応を書くなんてと思いましたが
よくよく調べてみると、Microsoftサポートでも公開していたので
まあいっかと思った次第です。

参考: Microsoft サポート オンライン

Trackback URL

3 Responses to “IE × SSL × リソースDL × no-cache”

  1. mind Says:

    初めまして。mindといいます。

    サポートオンラインを見ると。
    Internet Explorer 6Service Pack 1(SP1)で発生ってなってますけど、他のバージョンではおきないんですかねー。
    phpでheaderの書き換えで普段するのはcontent-typeくらいなもんでしょうか、なかなか気づきにくそうなところですね。

    ブラウザ固有の処理をコード内に書くのはやっぱり違和感ありますよね。
    ケータイとか向けだとままありそうな気もしますが。

  2. amo-k Says:

    初めまして 初めまして amo-kです。

    コメントありがとうございます!

    > Internet Explorer 6Service Pack 1(SP1)で発生ってなってますけど、他のバージョンでは
    全てを検証したわけではありませんが、
    少なくとも6SP2や7.0でも発生するようです。

    > phpでheaderの書き換えで普段するのはcontent-typeくらいなもんでしょうか
    そうですね、基本的には 出力データフォーマット指定や文字コードの指定等、Content-type の指定が多いですね。
    あとはリダイレクトで Location に URL を指定する事も多いですね。
    その他はHTTPステータスコードを指定することがたまにあるくらいでしょうか。

  3. choco Says:

    PHPでこの問題がおきていたので
    非常に助かりました。
    IE7でもこのバグなってますね。
    ありがとうございます。

Leave a Reply