PHPのheaderで304を返すと勝手にContent-Typeを書き換える問題
PHPのheader関数で304を返すと勝手にContent-Typeをtext/plainに書き換える。
どうやらcgi版のphp 5.2.6以前だけに起こるphpのバグらしいのだが,修正されている筈の5.2.8になっても治ってない。
header関数で、再度Content-Typeを指定してあげても、強制的にtext/plainに書き換えられるのでお手上げ。
本来は304 statusの時にはContent-Type自体送って来ないのが正しいです。
で、なんでこれが問題になるのかというと
IE7ではセキュリティ強化がされていて、キャッシュの内容とcontent-typeの異なる304 statusが返って来るとローカルキャッシュへのアクセスが拒否されてしまう。尚、firefox等の他のブラウザでは問題ない。
さらにうっとおしい事に、一度キャッシュに残ってしまうと『アクセスが拒否されました』というエラーメッセージと共にスーパーリロード(ctrl+F5)でも、キャッシュの再取得が出来なくなるということ、こうなると、直接、キャッシュフォルダを開いて該当のキャッシュファイルを削除するしか方法がなくなる。
おまけ
アクセスが拒否されましたというページは、内部javascriptによって以下のようなHTMLページが生成されています。
<html><head> <script src="res://mshtml.dll/objectembed_neutral.js"</script> </head><body objectSource="http://対象キャッシュファイルのURL" onload="ObjectLoad();" leftmargin=0 topmargin=0 scroll=no> <form id="objectDestination"></form></body></html>
トラックバック URL :
コメント (98)