* [CODE(MIME)[Content-Disposition:]] 頭欄 (MIME, HTTP, SIP) [44] [DFN[[CODE(MIME)[Content-Disposition]]]] [[実体頭欄]]には、 [[実体]]の[RUBYB[配置][disposition]]についての情報を記述します。 この頭欄は、ある実体について、たとえば - [[添付]]データか、[[行内]]データか、それとも ... - 保存時のおすすめの[[ファイル名]] のような[Q[性質]]を記述できます。 [50] この頭欄は元々は [ABBR[[[MIME]]][多目的インターネット・メイル拡張]] で使用するために定義されましたが、 [ABBR[MIME][多目的インターネット・メイル拡張]] と似た仕組みを採用している [ABBR[[[HTTP]]][ハイパーテキスト転送プロトコル]] や [ABBR[HTTP][ハイパーテキスト転送プロトコル]] を流用した [ABBR[[[SIP]]][セッション初期化プロトコル]] などでも使用されています。 [[#comment]] * 仕様 [52] [CODE(MIME)[Content-Disposition]] 欄は、 [ABBR[[[MIME]]][多目的インターネット・メイル拡張]], [ABBR[[[HTTP]]][ハイパーテキスト転送プロトコル]], [ABBR[[[SIP]]][セッション初期化プロトコル]] など様々なプロトコルで使用されています。 それぞれのプロトコルの歴史的・技術的その他の理由で、 細かい規定などに様々な違いがあります。 [4] [ABBR[MIME][多目的インターネット・メイル拡張]] ([[電子メイル]]) 系の仕様書: = [1] [[RFC 1806]] -- -- [[実験的]]プロトコルとして提案されましたが、 RFC 2183 によって[[廃止]]されました。 = [2] [[RFC 2183]] -- -- RFC 1808 の改訂版で、[[提案標準]]になりました。 = [3] [[RFC 2184]] -- -- 引数の構文に関する[[更新]]規格です。 -- 提案標準でしたが、 RFC 2231 により廃止されました。 = [51] [[RFC 2231]] -- -- RFC 2184 の改訂版で、引数の構文に関する RFC 2183 の更新規格です。 RFC 2184 と同じく提案標準です。 [48] [ABBR[HTTP][ハイパーテキスト転送プロトコル]] 系の仕様書: = [18] [ABBR[[[I-D]]][インターネット原案]] [[draft-faerber-http-content-disp-00]] [CITE[Use of the Content-Disposition header with HTTP]] -- -- -- [[RFC 2068]]・RFC 2616 を更新することを意図していましたが、 結局 RFC 化されませんでした。 -- RFC 2183 相当の内容です。 RFC 2184 には触れていません。 = [53] [[RFC 2616]] ([[HTTP/1.1]]) -- -- [CITE[19.5.1 Content-Disposition]] -- RFC 自体は[[原案標準]]ですが、 [CODE(HTTP)[Content-Disposition]] の部分は参考です。 -- 制定時期にもかかわらず、 RFC 1806 相当の内容です。 [ABBR[HTTP][ハイパーテキスト転送プロトコル]] では特に [CODE(MIME)[[[filename]]]] 引数がよく使われているにもかかわらず、 標準化は中途半端な状況です。 [38] [ABBR[SIP][セッション初期化プロトコル]] 系の仕様書: = [[RFC 3261]] -- [CITE[20.11 Content-Disposition]] -- 提案標準です。 -- 前版の [[RFC 2543]] では定義されていませんでしたが、 この版で RFC 2183 を基に規定され、積極的に用いられています。 なお、 RFC 2231 は参照していません。 [7] [ABBR[IANA][インターネット登録番号事務局]] の登録簿: - [CITE[MAIL CONTENT DISPOSITION Values and Parameters]] -- 10 October 2004 各仕様共通の登録簿です。 [[#comment]] * 構文 [45] - [CODE(ABNF)[[DFN[Content-Disposition]] := "Content-Disposition" *[[WSP]] ":" [ [[FWS]] ] disposition-type *([FWS] ";" [FWS] [[parameter]]) [FWS] ]] 構造的に似た [CODE(MIME)[[[Content-Type]]]] 欄とは異なり、 [CODE(ABNF)[disposition-type]] と [CODE(ABNF)[parameter]] は独立です。例えば [CODE(MIME)[filename]] 引数は [CODE(ABNF)[disposition-type]] が [CODE(MIME)[inline]] でも [CODE(MIME)[attachment]] でも何であっても使えます。 [46] [CODE(ABNF)[parameter]] は (少なくても MIME で使う時には) RFC 2184/2231 の方法で拡張されています。 [[#comment]] * Disposition 型 [47] ,[CODE(ABNF)[disposition-type]] ,意味 ,状態,出典 ,[CODE(MIME)[[[aib]]]],認証識別本体,,"SIP ([[RFC 3895]])" ,[CODE(MIME)[[[alert]]]] ,利用者に警告する個別音色 ,,"SIP (RFC 3261), [IANAREG]" ,[CODE(MIME)[[[ancillary]]]] ,(補助的) ,非標準,(draft-newman-mime-cdisp-metadata ) ,[CODE(MIME)[[[attachment]]]] ,利用者が表示を制御 ,,"MIME (RFC 1806, RFC 2183), HTTP (I-D), [IANAREG]" ,[CODE(MIME)[[[early-session]]]],早期通信セッション記述,,"SIP (RFC to be), [IANAREG]" ,[CODE(MIME)[[[file]]]] ,ファイル[[提出]] ,誤り,"[[フォーム]] (RFC 2388, [[HTML 4.01]] 初版)" ,[CODE(MIME)[[[form-data]]]] ,,[[フォーム]]応答として処理 ,"[[フォーム]] ([[RFC 1867]], [[RFC 2388]]), [IANAREG]" ,[CODE(MIME)[[[icon]]]] ,利用者に絵として表示 ,,"SIP (RFC 3261), [IANAREG]" ,[CODE(MIME)[[[inline]]]] ,自動的に表示 ,,"MIME (RFC 1806, RFC 2183), HTTP (I-D), [IANAREG]" ,[CODE(MIME)[[[render]]]] ,利用者に表示するべき ,,"SIP (RFC 3261), [IANAREG]" ,[CODE(MIME)[[[session]]]] ,通信セッション記述 ,,"SIP (RFC 3261), [IANAREG]" ,[CODE(MIME)[[[signal]]]] ,黙って処理するトンネル化内容 ,,"SIP ([[RFC 3204]]), [IANAREG]" ,[CODE(MIME)[[[signed-receipt-protocol]]]] ,,署名受信者用要求署名形式 ,"SIP (RFC 3335), [IANAREG]" ,[CODE(MIME)[[[signed-receipt-micalg]]]] ,,署名受信者用要求署名算法 ,"SIP (RFC 3335), [IANAREG]" [[#comment]] * パラメーター [49] ,引数名,説明,状態,出典 ,[CODE(MIME)[[[alternates]]]] ,代替媒体型 ,非標準,W3C NOTE-[[device-upload]] ,[CODE(MIME)[[[creation-date]]]] ,作成日時 ,,"MIME (RFC 2183), HTTP (I-D), [IANAREG]" ,[CODE(MIME)[[[device]]]] ,作成機器 ,非標準,W3C NOTE-[[device-upload]] ,[CODE(MIME)[[[filename]]]] ,[[ファイル名]] ,,"MIME (RFC 1806, RFC 2183), HTTP (RFC 2616), [IANAREG]" ,[CODE(MIME)[[[handling]]]] ,処理が必要か ,,"SIP ([[RFC 3204]]), [IANAREG]" ,[CODE(MIME)[[[modification-date]]]] ,編集日時 ,,"MIME (RFC 2183), HTTP (I-D), [IANAREG]" ,[CODE(MIME)[[[name]]]] ,[[フォーム]]欄名 ,,"フォーム ([[RFC 1867]], [[RFC 2388]]), [IANAREG]" ,[CODE(MIME)[[[read-date]]]] ,読取日時 ,,"MIME (RFC 2183), HTTP (I-D), [IANAREG]" ,[CODE(MIME)[[[size]]]] ,大体の大きさ ,,"MIME (RFC 2183), HTTP (I-D), [IANAREG]" ,[CODE(MIME)[[[voice]]]] ,,音声内容の型・用途 ,"[ABBR[[[VPIM]]][インターネット・メイル音声プロファイル]] ([[RFC 2421]]), [IANAREG]" [8] [[RFC 2183]] で調子に乗って色々定義しましたが、 [[MIME]] では [CODE(MIME)[filename]] 引数以外ほとんど使われていません。 [[#comment]] ** Voice パラメーター [16] IANAREG (>>7) に値の一覧があります。 ,Voice-Message , ,[[[RFC2421]]] ,Voice-Message-Notification , ,[RFC 2421] ,Originator-Spoken-Name , ,[RFC 2421] ,Recipient-Spoken-Name , ,[RFC 2421] ,Spoken-Subject , ,[RFC 2421] [[#comment]] ** Handling パラメーター [17] IANAREG (>>7) に値の一覧があります。 ,required ,本体を理解しなければならない ,[[[RFC3204]]] ,optional ,本体は黙って捨てても良い ,[RFC 3204] - [27] [[RFC 3459]] が RFC 3204 を update して、 [CODE[HANDLING]] パラメーターの定義を乗っ取りました。 - [28] 既定値は [CODE(MIME)[required]], 未対応値の扱いも [CODE(MIME)[REQUIRED]] です。 [[#comment]] * 仕様書から ** RFC 2616 (HTTP/1.1) 19.5.1 Content-Disposition [5] > The Content-Disposition response-header field has been proposed as a means for the origin server to suggest a default filename if the user requests that the content is saved to a file. This usage is derived from the definition of Content-Disposition in RFC 1806 [35]. [CODE(HTTP)[Content-Disposition]] [[応答頭欄]]は、 [[利用者]]が[[内容]]を[[ファイル]]に保存する場合の既定の[[ファイル名]]を[[起源鯖]]が提案するための手段として提案されています。 この使用は [[RFC1806]] の [CODE(MIME)[Content-Disposition]] の定義から派生しています。 > - content-disposition = "Content-Disposition" ":" disposition-type *( ";" disposition-parm ) - disposition-type = "attachment" | disp-extension-token - disposition-parm = filename-parm | disp-extension-parm - filename-parm = "filename" "=" quoted-string - disp-extension-token = token - disp-extension-parm = token "=" ( token | quoted-string ) > An example is - Content-Disposition: attachment; filename="fname.ext" > The receiving user agent SHOULD NOT respect any directory path information present in the filename-parm parameter, which is the only parameter believed to apply to HTTP implementations at this time. The filename SHOULD be treated as a terminal component only. 現時点では [CODE(ABNF)[filename-parm]] 引数だけが HTTP 実装に適用されると信じられていますが、 受信した[[利用者エージェント]]は、 [CODE(ABNF)[filename-parm]] 引数に示されたいかなる[[ディレクトリ]][[経路]]情報も尊重する'''べきではありません'''。 ファイル名は最終部品のみとして扱う'''べきです'''。 > If this header is used in a response with the application/octet-stream content-type, the implied suggestion is that the user agent should not display the response, but directly enter a `save response as...' dialog. この頭が[[応答]]で [CODE(MIME)[[[application/octet-stream]]]] [[内容型]]と共に使われている場合は、利用者エージェントは応答を表示するべきではなく、 「応答を保存・・・」対話に直接入るべきであることを暗に提案しています。 > See section 15.5 for Content-Disposition security issues. ** RFC 2616 (HTTP/1.1) 15.5 Content-Disposition Issues > RFC 1806 [35], from which the often implemented Content-Disposition (see section 19.5.1) header in HTTP is derived, has a number of very serious security considerations. Content-Disposition is not part of the HTTP standard, but since it is widely implemented, we are documenting its use and risks for implementors. See RFC 2183 [49] (which updates RFC 1806) for details. [[HTTP]] でしばしば実装される [CODE(HTTP)[Content-Disposition]] 頭は [[RFC 1806]] から派生したものですが、 RFC 1806 には多くの非常に深刻な安全上の問題があります。 [CODE(HTTP)[Content-Disposition]] は HTTP 規格の一部ではありませんが、広く実装されていることから、 その使用と危険を実装者のために文章化しています。 詳しくは (RFC 1806 を更新する) [[RFC 2183]] をご覧下さい。 ** RFC の部分の License [[RFCのライセンス]] * メモ [19] [CODE[Content-Disposition:]] 欄は、 HTTP でも (特に [[CGI]] script の類で) よく使われるにも拘らず、 HTTP Core 仕様書は簡単に触れるにとどまっています。 >>18 は RFC 2184 及び現実の使用状況・ HTTP の仕様をそれなりに折り合わせたもので、実装の指針としては (期限切れ I-D ながらも) 十分な品質だと思われます。 - [21] >>19 ただし、 >>20 のような問題には触れていませんから、もちろんこの I-D に従って実装すれば良いというものでもありません。 - [22] 現実の実装では [[Content-Type:]] 欄の値, この [CODE[Content-Disposition:]] 欄の値、それに [[URI]] のファイル名やその他の条件で、 [[WWW]] ブラウザ等はブラウザ内で表示したり保存ダイアログを出したり, どの部分をファイル名に採用するかを決めたり、云々でばらばらで混乱していますね。 (特に [[M$IE]] の場合は、版によっても挙動が変わったり、同じ版でも Windows Registry の設定で不可解に変化したりするそうです。) - [23] サーバーが UA に保存させるのに、 dispositon 型 [CODE[file]] を指定して、 [SAMP[Content-Disposition: file; filename=foo]] のように指定することがあるようです。 ([[CGI]] script とかで。) - [24] ''Bug 2781 - freemail.ne.jp(GraceMail)でメール本文が表示されない(Content-disposition: attachment)'' CD: におかしな値を設定していたために、 [[Mozilla]] の動作が規格により従う形に変更された際に意図せぬ動作をするようになった例。 - [25] 値 [CODE(MIME)[file]] を使った例が [[HTML4]] に出ています。 ''Forms in HTML documents'' - [26] >>25 しかし、 Errata では、 RFC 2388 からして間違っているのだと言っています。 ''HTML 4 Errata'' - [29] Referer とか「注目の WikiPage」ランキングみてると、実は [CODE[Content-Disposition]] 欄ってすごい人気ですね。やっぱり「[[HTTP]] で[[ダウンロード]]させる[[ファイル名]]を指定する方法」として有名だからかな? - [31] >>29 [[とほほ]]とか [[CGI-ML]] とか [[Web相談室]]とかが普及に貢献してますから(w - [32] それにしても、 HTTP 用のこの欄が標準化されないのはすごく謎。他の MIME 由来欄はちゃんと標準化してるのに。特にファイル名の非 ASCII 文字の問題 ([[encoded-word]] or [[RFC 2231]] or 生) という大問題があるから、 MIME 任せには出来ないと思うんだけど。 (2231 実装している HTTP UA なんてあるんだろうか?) - [33] [WEAK[2003-08-29 11:41:24 +00:00]] ''[[attachment]]'': >>29 この WikiPage は [[Google]] で日本語11位にランクインしてますから(藁