Content-Dispositionがinlineの時のfilenameは有効? 
2013/02/25, 01:30 - IT
以下の要件を満たす機能が構築可能かどうかの調査メモ。
------------------------------------------
(1) サーバ側でPDFを生成して、そのままウィンドウに表示。(ダイアログを出さずに)
(2) 表示されたPDFを保存する時のファイル名をデフォルト値を指定した物にする。
------------------------------------------

◆Wikiまとめ記事
サーバ側で作成したPDFの表示とクライアントPCへの保存時のファイル名の指定

(1) は Content-Typeの設定と、Content-Disposition: inline にするだけでOKなので、全く問題ないのですが、問題は(2)。

IEだと Content-Disposition: inline の時に filenameが効かない。
つまりPDF生成処理のURLが create_pdf_normal.php だとすると、以下のようにHTTPヘッダを指定しても、保存時のファイル名は create_pdf_normal になってしまう。
------------------------------------------
Content-Disposition: inline; filename=hoge.pdf
------------------------------------------

そもそも、レスポンスヘッダに指定したfilenameが使用できるのは、(attachmentの時に)ダウンロードダイアログを表示するタイミングだけで、いったんブラウザに表示した後は、レスポンスヘッダの内容なんて、もう捨てられてんじゃないの?と思ってたのですが、RFC を見る限り、どうも 違うようです。

◆RFC 2183 和訳
http://www.studyinghttp.net/cgi-bin/rfc.cgi?2183
------------------------------------------
2.3 ファイル名パラメータ
エンティティが別のファイルへと切り離され、保存される場合、送信者は使われるファイル名を提示したいと思うかもしれない。 受信する MUA はファイルへエンティティを書き込む場合には、提示されたファイル名が実際のファイル名の元となるものとして、可能な限り使うべきである。


そのパラメータは、いかなる MIME エンティティにも、`inline' のものであったとしても、使われるかもしれない。
------------------------------------------
「かもしれない」という所が微妙ですが、inlineの時でもfilenameの指定はアリ。という事らしい。

で、ブラウザ別の対応状況を調べてみたのですが、問題なのは IEだけでした。
サーバ側で作成したPDFの表示とクライアントPCへの保存時のファイル名の指定

IE9 になって、CSS3がそこそこ使えるようになった IE ですが、基幹系のWebシステムはターゲットブラウザ=IE の場合がほとんどなので、IEにはまだまだ悩まされそうです。


戻る