Content-Disposition
概要

サーバがContent-Dispositionを指定しない場合、ブラウザはContent-Typeヘッダなどをもとに表示方法を判断し、対応可能な形式であればそのまま画面に表示する。Content-Dispositionに「inline」を指定した場合も同様に画面内表示となるが、「attachment」を指定すると、ブラウザは表示を行わず保存用のダイアログを開き、利用者にダウンロードを促す。
「attachment」を指定する際には、「filename」パラメータを併記することが多い。これにより、ダウンロード時のデフォルトのファイル名をサーバ側から指定できる。例えば、「Content-Disposition: attachment; filename="report.pdf"」と記述すれば、ブラウザ側では「report.pdf」という名前で保存ダイアログが表示される。
日本語などの非ASCII文字を含むファイル名を指定する場合は「filename*」パラメータを用い、UTF-8のパーセントエンコーディングで表記する。両方のパラメータが存在するとき、モダンブラウザはfilename*を優先し、非対応の古いクライアントはfilenameを利用する。通常、ファイル名は利用者が保存ダイアログ上で指定することもできる。
Webサイトの開発者は、PDFや画像、圧縮ファイルなど、リンクを開くとそのままブラウザ表示されてしまう種類のデータを確実にダウンロードさせたい場合、この設定を組み込む。「ダウンロード」ボタンを押した際に保存ダイアログが開き、あらかじめ適切なファイル名が入力されているのは、この仕組みによるものである。
このヘッダはもともと電子メールの規格である「MIME」(Multipurpose Internet Mail Extensions)において、添付ファイルの扱いを示すために定義されたものであり、後にHTTPの仕様にも取り入れられた。電子メールでは本文中に埋め込むインライン表示と別途保存する添付ファイルを区別する目的で使われ、HTTPでもその考え方が引き継がれている。
HTTPにおける用途はもう一つあり、multipart/form-data形式のPOSTリクエストである。フォームデータをマルチパートで送信する際、各パートにContent-Dispositionを付与し、フォームフィールドの名前やアップロードファイルのファイル名を示す役割がある。この場合はレスポンスではなくHTTPリクエストヘッダの一部としてブラウザ側で付与される。