閉じる
  1. Mac + Parallels で日本語入力(IME)切り替えをスムー…
閉じる
閉じる
  1. MacでVOICEROID
  2. Macの通知を制御する(Google Chromeだけオフにする対応も…
  3. 尿酸値を下げる(プリン体が原因ではなかった?)
  4. 100円でLightningケーブルを保護する vs 100均Ligh…
  5. iPhone機種変更で困ったこと(復元できない・ヘルスケア・Apple…
  6. 事業承継について(3)節税に向けて
  7. 事業承継について(2)我が社の株価はいくらか?
  8. 事業承継について(1)
  9. PHPExcelでセルの名前(ラベル)を使う
  10. MacとiPhoneでメモ帳を同期する
閉じる

リンゴと守護神とペンギンと窓

キャッシュファイルが作成できません

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ヘッダに関するすばらしい記事がある。(←このサイトが消えないことを強く強く望みます)

関連記事

  1. PHPExcelで大きいエクセルファイルを読み込んだときメモリ不…

  2. PHPExcelでセルの名前(ラベル)を使う

  3. Macでステップカウンタ(Ohcount)を使う

  4. iOSデバイスのUDID(識別子)を調べる

おすすめ記事

  1. Mac + Parallels で日本語入力(IME)切り替えをスムーズに

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

おすすめ記事

  1. MacでVOICEROID
  2. Macの通知を制御する(Google Chromeだけオフにする対応も)
  3. 尿酸値を下げる(プリン体が原因ではなかった?)
ページ上部へ戻る