解説
ダウンロード名はURLだけで決まる?Content-Dispositionの役割を確認しよう
リンク先はdownloadというURLなのに、保存するとreport.txtという名前になった。ファイルの名前は、URLの末尾だけで決まるとは限らないよ。

リンク先はdownloadというURLなのに、保存するとreport.txtという名前になった。ファイルの名前は、URLの末尾だけで決まるとは限らないよ。
ここではHTTPのContent-Dispositionという応答ヘッダーを確認する。ヘッダーは、本文とは別に通信の情報を伝えるもの。サーバーの実装手順ではなく、ダウンロード時の案内を読むための解説だよ。
表示するか、保存へ案内するか
Content-Dispositionは、受け取った内容をどう扱うかの情報に使われる。Webの応答ではinlineとattachmentがあり、attachmentは通常、保存の案内につながる。
次は説明用の応答の一部だよ。
Content-Type: text/plain; charset=utf-8
Content-Disposition: attachment; filename="report.txt"
Content-Typeは内容の種類。Content-Dispositionのfilenameは保存名の候補を示す。同じヘッダーで何を保存するかと、どう呼ぶかを区別しよう。
名前は提案として扱われる
ブラウザやOSは、不正な文字を処理したり、同名ファイルを避けて名前を変えたりする場合がある。設定した名前が、どの環境でもそのまま使われる保証ではないよ。
国際化された名前にはfilename*という指定もある。英数字のfilenameと併記する場合の扱いなど、仕様を確認して実装する。手作業で日本語を引用符に入れるだけで、すべての環境へ対応できるとは考えないようにしよう。
拡張子と内容を合わせる
ファイル名をreport.pdfにしただけで、本文がPDFに変わるわけではない。実際の形式、Content-Type、保存名が一致しているかを確認する。
利用者が決めた名前をそのままヘッダーへ入れる実装では、改行やパスなどの扱いも重要。既存のライブラリと安全な名前の生成方法を使い、本文を信頼することと名前を信用することを分けよう。
自分の管理する配信で確認する
- 秘密情報を含まない練習用ファイルを用意する。
- 開発者ツールのNetworkで、応答ヘッダーを見る。
- 保存時の名前と、開いた内容を照合する。
- 同じ名前のファイルがある場合や、日本語の名前も必要な範囲で確認する。
- ブラウザとOSを添えて結果を残す。
本文のヘッダー例は、ローカルの練習HTTPサーバーで返し、取得した値と本文を照合したもの。実際の保存画面の見え方は、使うブラウザで別に確認しよう。

みんなのコメント 0
感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。
最初のコメントをどうぞ。