キャッシュファイルが作成できません
PHPで開発中のサイトで、動的にPDFファイルを生成して提供するページで、HTTPSで運用するときは注意が必要だ。
テストサイトは社内にありHTTPでテストを実施したりすると、HTTPS環境ではうまく動かないことがある。
PDFページを要求すると、IEが
「ダウンロードできません。ファイルをキャッシュに書き込めませんでした」
とのたまう。
MicrosoftのKBに「キャッシュファイルが作成できない場合はファイルのダウンロードに失敗する」というのがあった。
要は
- httpsを利用するようなときは秘匿性が要求されているのでクライアントキャッシュをさせないようにして、第三者にキャッシュファイルをコピーされる危険性を避ける
- ところがPDFのように外部アプリケーションを使う場合はキャッシュファイルが無いと開けない問題がある
ということだ。
当たり前といえば当たり前の動きだ。
ふむふむ。そこでMicrosoftはhotfixを提供したようだが、PHPなどで、Content-TypeとContent-Lengthなんかの最小限のヘッダしか送出しないように書いていると、実際は、Cache-Control: no-cache が送出されて、クライアントキャッシュしないようになるため、先のエラーが表示されることとなる。
これを回避するには
- header(‘Pragma: private’);
- header(‘Cache-Control: private’);
を送出するようにして、明示的にクライアントにキャッシュさせる必要がある。
private にすることでプロキシなどにはキャッシュさせないようにしておく。
ここで留意すべき点は、
- HTTPSでも単にコンテンツを表示するだけならば、キャッシュさせなくてもよい
- つまり、個人情報やクレジット情報などのコンテンツはPDFで提供するのは好ましくない
- これらの動作を発注者も制作者もユーザも認識するよう注意表示すべき
といったところかと思う。
ちなみに、こちらにHTTPヘッダに関するすばらしい記事がある。(←このサイトが消えないことを強く強く望みます)
コメント
この記事へのトラックバックはありません。
この記事へのコメントはありません。