SSL(HTTPS)でファイルのダウンロードができない場合

プログラムなどで出力されるファイルをダウンロードする場合、Ineternet Explorerで次のようなエラーが出ることがあります。


[参考記事] ファイルダウンロード時のファイル名が文字化けする対処法

これはIEの次のバグによるものです。
KB323308 : Internet Explorer が SSL 経由によるファイルのダウンロードで "No-Cache" ヘッダーを処理できない

IE9では起こらず、IE8以下で発生します。

PHPではheader関数でCache-ControlとPragmaを指定しない場合、次のようなレスポンスヘッダーが出力されます。

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

これがエラー発生の原因です。
IE8以下では、サーバーのレスポンスに「Cache-Control: no-cache」等のヘッダーが付いている場合はキャッシュを参照できなくなり、 ダウンロードに失敗します。

このCache-Controlヘッダーを上書きするために、次の指定をするとダウンロードできるようになります。

header('Cache-Control: public');
header('Pragma: public');

まとめると次のようになります。

header('Last-Modified: '. gmdate('D, d M Y H:i:s') .' GMT');
header('Content-Description: File Transfer');
header('Content-Type: ' . $content_type);
header('Content-Disposition: attachment; filename="'.$file_name.'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file_path));
header('Cache-Control: public');
header('Pragma: public');

[参考記事] ファイルダウンロード時のファイル名が文字化けする対処法

ユーザー側での設定

ユーザー側でできる対処法としては次のものがあります。

レジストリでの設定

ユーザー単位で設定する場合

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings
"BypassSSLNoCacheCheck"=Dword:00000001

コンピュータ単位で設定する場合

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings
"BypassSSLNoCacheCheck"=Dword:00000001

インターネットオプションでの設定

インターネットオプション

『詳細設定』タブ

『暗号化されたページをディスクに保存しない』のチェックを外します。


この設定のチェックが有効になっていると、SSL サイトで取得したキャッシュファイルを参照することができずに、 ダウンロードに失敗することがあります。

関連記事

スポンサーリンク

POSITION関数 文字列中の文字列を検索する

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る