DESIGN / CODE / INFRA / AI

解説

ダウンロード名はURLだけで決まる?Content-Dispositionの役割を確認しよう

リンク先はdownloadというURLなのに、保存するとreport.txtという名前になった。ファイルの名前は、URLの末尾だけで決まるとは限らないよ。

ダウンロード名はURLだけで決まる?Content-Dispositionの役割を確認しよう
保存リストを見る →
この記事の道しるべ 5項目

リンク先は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、保存名が一致しているかを確認する。

利用者が決めた名前をそのままヘッダーへ入れる実装では、改行やパスなどの扱いも重要。既存のライブラリと安全な名前の生成方法を使い、本文を信頼することと名前を信用することを分けよう。

自分の管理する配信で確認する

  1. 秘密情報を含まない練習用ファイルを用意する。
  2. 開発者ツールのNetworkで、応答ヘッダーを見る。
  3. 保存時の名前と、開いた内容を照合する。
  4. 同じ名前のファイルがある場合や、日本語の名前も必要な範囲で確認する。
  5. ブラウザとOSを添えて結果を残す。

本文のヘッダー例は、ローカルの練習HTTPサーバーで返し、取得した値と本文を照合したもの。実際の保存画面の見え方は、使うブラウザで別に確認しよう。

基本の形式の話は拡張子の変更と変換の違いも参考になるよ。

参照した公式資料

確認日:2026年10月24日。

参考・出典

公開と変更の記録
  • :初回公開

日時は日本時間です。記載のある変更は、確認できた編集記録に基づきます。更新日の違いだけから変更内容を推測して載せることはありません。

更新・訂正の方針 →

みんなのコメント 0

感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。

最初のコメントをどうぞ。