読者です 読者をやめる 読者になる 読者になる

@Satoh_D no blog

大分にUターンしたので記念に。調べたこととか作ったこととか食べたこととか

SSLを使用したページ内で、IE8でファイルのダウンロードが出来なかった

携わっている案件にPDFをダウンロードする機能があるります。 そのダウンロード機能なのですが、他のブラウザは上手くいっているのにIE8以下でダウンロードが出来ない問題がありました。
調べて解決までもっていけたのでメモしておきます。

今回は以下の環境で調べています。

現象について

「ダウンロード」ボタンを押すと調査結果の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ですね。一筋縄ではいかないです...。

今回参考にしたページ