Content-Disposition: attachment; filenameのrfc 6266形式


書き出すと長くなるので要点のみ。
また例に漏れず試行錯誤の混乱中に書いているので要注意。

失敗時は大抵URL末尾がファイル名になる。

日本語ファイルの文字化けつらひ。

Chrome 62

NG

filename*="utf8''urlエンコードされたファイル名"

e-mailでもたまにある属性値をダブルクォーテーションで囲む形式。

追記

filename自体へのダブルクォーテーションは可のようだ。

Content-Disposition: INLINE; FILENAME= "an example.html"

Note: This uses the quoted-string form so that the space character
can be included.

引用符があるのでスペースを含めることができるが、URLエンコードするfilename*には関係がない。

RFC 6266 - Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)#example

OK

filename*=utf8''urlエンコードされたファイル名

IE11

NG

filename*=utf8''urlエンコードされたファイル名

OK

filename*=utf-8''urlエンコードされたファイル名

大概のライブラリは表記ゆれを許容してくれるが、IEはダメだったみたい。
また、IEはRFC 6266対応がIE9からと
http://www.msng.info/archives/2014/04/internet-explorer-11-user-agant-change.php
にあったが、開発者ツールのドキュメントモードでバージョンを落とすだけでは再現はしない?(5に落としても成功)

Firefox

他でNGでも大抵うまくいくように見える。

併記方式

filename=hogehoge;filename*=utf8''urlエンコードされたファイル名

filename*=utf8''urlエンコードされたファイル名;filename=hogehoge;

これは各ブラウザfilename*=が優先されるようだ。
filename*=に対応していないブラウザがfilename=を参照してくれることを確認できれば併記方式が安全なのだが…

併記で行けそう

ダウンロードファイル名、文字化けとの格闘 - ねぎぶログ

結論:

ブラウザ判定のロジックを入れ込むことなく、 複数のブラウザにてダウンロードファイルの文字化けを避けたい場合は、 レスポンスヘッダに

Content-Disposition: attachment;
                     filename="ファイル名";
                     filename*=UTF-8''URLエンコーディン
グされたファイル名

上記のように設定しよう。 恐れることはない、filename*が有効なブラウザではfilename側は無視される。