背景
- PDFをiframeタグでインライン(埋め込み)表示したいよくある話
- サーバーサイドで動的に生成したPDFファイルを表示する
- レスポンスヘッダの設定などをしてもEdgeだけPDFをダウンロードしてしまう
- 資料が少なく自力で調査することになった
Edgeの仕様
- ブラウザに標準でPDFリーダ機能が搭載されている
- POSTリクエストで取得したPDFファイルは強制ダウンロード
- レスポンスヘッダで
Content-Disposition: inline
を設定してもPOSTリクエストだと無視される
解決策
- PDF生成に必要なパラメータはURLで送る(GET送信)
- iframeタグのsrc属性にパラメータつきURLを設定
- レスポンスヘッダの設定
Content-Type: application/pdf
Content-Disposition: inline; filename="ファイル名"
-
Content-Length
は設定しなくてもよい
補足
- IEでのPDF表示にはアドオンが必要
- IE、Edgeではインライン表示時に保存ファイル名をあらかじめ指定することはできない
- Edgeでの「POSTの場合ダウンロードする」という挙動の回避策は見つからず