久しぶりのブログ投稿になります。内藤です。
ちょっと理解浅いので、記述が正確でない場合はご指摘ください。
TL;DR
- WebアプリでPDFをブラウザ(Chrome)で表示したあと、ダウンロードしようとすると設定したファイル名でダウンロードできなかった
- content-disposition: inline; filename="~"で指定したファイル名は、cache-control: no-store指定していると効かなくなる
起きた現象
サーバサイドでPDF作成し、ブラウザ上で表示させる機能を実装しました(content-disposition: inline; filename="~")。
ブラウザ上でPDF表示されるのですが、Chromeからダウンロードしようとすると、content-dispositionで指定したファイル名でなく、「ダウンロード」という名前でダウンロードしようとします。
原因
セキュリティ観点から、cache-control: no-storeを指定していました。
これはブラウザ側でレスポンスをキャッシュに保存しないようにする指示です。
ところで、ダウンロード時のファイル名は、現象の説明に記載したように、レスポンスヘッダに記載しています。
従って、cache-control: no-store指定されると、ブラウザ側でダウンロード時のファイル名を保持できなくなります。
対処
content-disposition: inline指定されているページでだけ、cache-control: no-store を設定しないように変更しました。