SSLを使用したページ内で、IE8でファイルのダウンロードが出来なかった
携わっている案件にPDFをダウンロードする機能があるります。
そのダウンロード機能なのですが、他のブラウザは上手くいっているのにIE8以下でダウンロードが出来ない問題がありました。
調べて解決までもっていけたのでメモしておきます。
今回は以下の環境で調べています。
- Windows7 IE8(VirtualBox)
- PHP5.5.15
現象について
「ダウンロード」ボタンを押すと調査結果のPDFがダウンロード出来るのですが、
IE8だと以下の様なダイアログが出てダウンロードができなくなります。
Unable to open this Internet site. The requested site is either unavaible or cannot be found. Please try again later.
原因はIEのバグ
IE8以下のブラウザでは
"SSL環境では、サーバのレスポンスのヘッダに「Cache-control: no-store」または「Cache-control: no-cache」が付いているとダウンロードが出来ない"
というバグがあります。これが今回の原因でした。
このバグを回避するにはヘッダのCache-controlを上書きしなければいけません。
そこで以下のコードを挿入します。
header('Cache-contrrol: public'); header('Pragma: public');
今回はZend frameworkを使用していたので、最終的には以下のコードを入れることになりました。
// 出力ヘッダーを設定 $response = $this->getResponse(); $response->setHeader('Cache-Control', 'public', true); $response->setHeader('Pragma', 'public', true); ...
なんとか原因がつかめて良かったです。
さすがIEですね。一筋縄ではいかないです...。