Content-Disposition
通常の HTTP レスポンスにおける Content-Disposition レスポンスヘッダーは、コンテンツがブラウザーでインラインで表示されることを求められているか、つまり、ウェブページとして表示するか、ウェブページの一部として表示するか、ダウンロードしてローカルに保存する添付ファイルとするかを示します。
本文が multipart/form-data である場合、 Content-Disposition ヘッダーは、マルチパートを構成する各サブパートに付与され、そのフィールドに関する情報を示します。サブパートはContent-Type ヘッダーで定義された boundary によって区切られます。マルチパートの本文自体に付与した場合、 Content-Disposition は何の意味も持ちません。
Content-Disposition ヘッダーはメールにおける MIME メッセージのより広い用途で定義されたものですが、 HTTP のフォームと POST リクエストに利用可能な引数は一部だけです。ヘッダーの値である form-data と、省略可能なディレクティブ name と filename のみが HTTP の用途で使用することができます。
構文
本文に適用するレスポンスヘッダーとして
この用法では、inline (既定値。ウェブページの一部として、またはウェブページとして表示可能であることを示します)、もしくは attachment (ダウンロードすべきであることを示します。多くのブラウザーは filename 引数の値を使い、「名前を付けて保存」ダイアログを表示します) を最初の引数して指定します。
Content-Disposition: inline Content-Disposition: attachment Content-Disposition: attachment; filename="filename.jpg"
マルチパート本文で使うヘッダーとして
この用法では最初の引数は常に form-data です。追加のパラメーターは大文字小文字を区別せず、 '=' 記号に続けてクォートされた文字列で引数を指定します。複数の引数はセミコロン (';') で区切ります。
Content-Disposition: form-data Content-Disposition: form-data; name="fieldName" Content-Disposition: form-data; name="fieldName"; filename="filename.jpg"
ディレクティブ
name-
このサブパートの内容が参照するフォームの HTML フィールドの名前を含む文字列が続きます。同じフィールド内の複数のファイルを扱う場合 (例えば、
<input type="file">要素のmultiple属性)、同じ名前を持つ複数のサブパートが存在することがあります。nameの値が'_charset_'という値である場合は、その部分が HTML フィールドではなく、明示的な文字セット情報のない部分に使用される既定の文字セットであることを示します。 filename-
送信された元のファイル名を含む文字列を指定します。このファイル名は常に任意であり、アプリケーションで使用する際は注意が必要です。例えばパス情報を取り除いたり、サーバーのファイルシステムに合わせてファイル名の変換を行ったりすべきです。この引数は、ほとんどの情報を提供します。
Content-Disposition: attachmentと組み合わせて使用すると、ユーザーに表示される「名前を付けて保存」ダイアログの既定のファイル名として使用されます。 filename*-
引数の
filenameとfilename*の違いは、filename*が RFC 5987 で定義されているエンコーディングを使用するという点のみです。単一のヘッダーフィールドの値にfilenameとfilename*の両方が存在する場合は、両方が解釈できる場合、filename*がfilenameよりも優先されます。
例
「ファイル名を付けて保存」ダイアログを起動するレスポンスです。
200 OK Content-Type: text/html; charset=utf-8 Content-Disposition: attachment; filename="cool.html" Content-Length: 21 <HTML>Save me!</HTML>
このサンプル HTML ファイルは、ブラウザーに表示されるのではなく、通常のダウンロードとして保存されます。ほとんどのブラウザーは、 (既定で) cool.html というファイル名で保存することを提案します。
multipart/form-data 形式を使用して送信された HTML フォームの例で、 Content-Disposition ヘッダーを使用したものです。
POST /test.html HTTP/1.1 Host: example.org Content-Type: multipart/form-data;boundary="boundary" --boundary Content-Disposition: form-data; name="field1" value1 --boundary Content-Disposition: form-data; name="field2"; filename="example.txt" value2 --boundary--
仕様書
ブラウザーの互換性
BCD tables only load in the browser
互換性の注意
- Firefox 5 は、
Content-Dispositionレスポンスヘッダーでfilenameとfilename*の両引数が提供されている場合、より効果的に処理します。filename引数が先にあった場合でも、提供されたすべての名前を調べ、利用可能な場合はfilename*引数を使用します。以前は、先に一致した引数がより適切な名前が使われていませんでした。 Firefox バグ 588781 を参照してください。
関連情報
- HTML Forms
Content-Type: マルチパート本文の境界を定義FormDataインターフェイス:XMLHttpRequestAPI でフォームデータを操作するために使用