* [CODE(MIME)[Content-Type:]] 頭欄 (MIME, HTTP, RTSP, SIP) [14] [CODE(MIME)[Content-Type:]] 欄は、 その[RUBYB[[[実体]]][entity]]の型を指定する欄です。 [DFN[[RUBYB[型][type]]]]とは文章 ([SAMP(MIME)[[[text/plain]]]]) か画像 ([SAMP(MIME)[[[image/png]]]], [SAMP(MIME)[[[image/jpeg]]]] など) か [ABBR[[[XHTML]]][Extensible Hypertext Markup Language]] ([SAMP(MIME)[[[application/xhtml+xml]]]]) か、 はたまた・・・というようなものです。 この型を、[DFN[[RUBYB[[[媒体型]]][media type]]]]と呼びます。 [15] 初め [[RFC 1049]] が定義していましたが、これと互換性のない [ABBR[[[MIME]]][Multipurpose Internet Mail Extensions]] が再定義した形式が普及し、 [ABBR[[[HTTP]]][Hypertext Transfer Protocol]] など他のプロトコルでも採用されています。 ** 構文 (MIME 以後) [22] [CODE(MIME)[Content-Type:]] 欄の[RUBYB[[[欄本体]]][field body]]には、 [[媒体型]]を指定します。媒体型は、 [RUBYB[型][type]] [WEAK[(例: [SAMP(MIME)[text]])]] と[RUBYB[亜型][subtype]] [WEAK[(例: [SAMP(MIME)[plain]])]] の組で表します [WEAK[(例: [SAMP(MIME)[text/plain]])]]。 より詳細な指定を行う[DFN[[RUBYB[引数][parameter]]]]の指定も可能 [WEAK[(例: [SAMP(MIME)[text/plain; format=flowed]])]] で、 広義には引数の指定も含めて媒体型と呼びます。 構文の子細は規格によって異なりますが、 おおむね次のように表せます。 - [CODE(ABNF)[[DFN[Content-Type 欄]] := "Content-Type" ":" Content-Type 欄本体]] - [CODE(ABNF)[[DFN[Content-Type 欄本体]] := 媒体型]] - [CODE(ABNF)[[DFN[媒体型]] := 型 "/" 亜型 *(";" 引数指定)]] - [CODE(ABNF)[[DFN[引数指定]] := 引数名 "=" 引数値)]] [23] 例えば [[MIME]] では、 >>22 の構文字句間に [CODE(ABNF)[[ABBR[[[LWS]]][linear white space]]]] を挿入できます。 [CODE(ABNF)[型]]・[CODE(ABNF)[亜型]]・[CODE(ABNF)[引数名]]の大文字・ 小文字や[CODE(ABNF)[引数指定]]の順序は意味を持ちません。 [[HTTP]] は MIME とほぼ同じですが、 [CODE(ABNF)[型]]や[CODE(ABNF)[引数値]]の定義 [WEAK[(>>22 では省略しています。)]] に使われている [CODE(ABNF)[[[token]]]] の定義が少々異なります。 [24] また、 MIME は [[RFC 2231]] で改訂され、 実際に[[実体]]の頭部に出現する構文で >>22 よりも複雑な指定方法が使えるようになっています。 [WEAK[(長い引数値を[[電子メイル]]で使う場合の対策や[[言語指定]]を含める手段が用意されています。)]] しかし、 [[HTTP]] など MIME から派生したプロトコルにまでこの改訂が及ぶのかどうかは曖昧になっています。 [WEAK[(HTTP のように仕様書で構文を再定義している仕様は影響しないという説が有力です。)]] [[#comment]] ** 解釈の変え方 [21] [[電子メイル]] ([[822]]) の [CODE(822)[Content-Type:]] 欄の規定は [[RFC 1049]] と [[MIME]] の2種類があります。両者の構文は全然違います。 同じメッセージに [CODE(822)[[[MIME-Version]]:]] 欄があれば MIME によって解釈し、なければ RFC 1049 で解釈するのが正しいそうです。 [WEAK[(という話は仕様書には載っていなくて、[[ietf-822]] かどこかでそう聞きました。)]] (もっとも、構文が全然違うのでどちらの構文も扱えるようにするのは難しくありませんし、 古いメッセージを扱わないのであれば RFC 1049 の構文は無視しても良いかもしれません。) [[#comment]] ** 引数 [8] [CODE(MIME)[Content-Type:]] 欄には狭義の[[媒体型]]に加えて、 任意の個数の[DFN[[RUBYB[引数][parameter]]]]を指定できます。 引数は、名前と値の組からなります。値の解釈は名前に依存します。 そして引数の解釈は、[WEAK[(狭義の)]] 媒体型に依存します。 (引数は媒体型の[[属性]]であり、 [CODE(MIME)[Content-Type:]] 欄の属性ではありません。) [11] 引数名は、大文字・小文字の区別なしで定義されています。 [[MIME]] など多くの規格では、頭欄に大文字・ 小文字どちらで書いても同じ意味です。引数名として使用できる文字は、 規格によって異なります。 MIME と [[HTTP]] では共に [CODE(ABNF)[[[token]]]] ですが、その [CODE(ABNF)[token]] の定義が両規格で異なります。現実に使われている文字は [CODE(ABNF)[token]] で使える文字の共通集合の更に小さな部分集合です。 [18] 引数値では、大文字・小文字を区別するかどうかは 引数名 [WEAK[(正確には、媒体型と引数名)]] に依存します。 例えば、 [SAMP(MIME)[[[text/plain]]]] の [SAMP(MIME)[[[charset]]]] 引数では区別しませんが、 [SAMP(MIME)[[[application/octet-stream]]]] の [SAMP(MIME)[[[name]]]] では区別します。 MIME では、引数値は [CODE(ABNF)[[[value]]]] であり、 [CODE(ABNF)[token]] または [CODE(ABNF)[[[quoted-string]]]] として定義されていますから、 前者では引数名同様の文字種しか使えませんが、後者により [[RFC 822]] で使えるすべての [ABBR[[[ASCII]]][American Standard Code for Information Interchange]] 文字が使えます。 それでも使える文字はわずかに限られますが、 [[RFC 2231]] の方法で事実上あらゆる文字の指定が可能です。 HTTP でも [CODE(ABNF)[token]] と [CODE(ABNF)[quoted-string]] が使えますが、前述のように [CODE(ABNF)[token]] の定義は MIME と異なりますし、 [CODE(ABNF)[quoted-string]] の定義も異なります。 RFC 2231 の方法は使用できないと一般には考えられています。 MIME・HTTP 以外の規格も [CODE(ABNF)[token]] と [CODE(ABNF)[quoted-string]] が使えることが多いですが、 詳細はばらばらです。 [19] 引数は媒体型の定義と共に登録することになっています。 そのためか、電子メイルや MIME の多くの他の[Q[字句]]のような名前付けに関する規定がありません。 [WEAK[([SAMP[x-]] で始まる引数名を[[私用]]してもよいという規定もありません。)]] [[#comment]] *** 比較的共通なパラメーター [16] >>8 の通り、引数は媒体型各々固有のものであるのが原則ですが、 必然的に、または間違いにより、 媒体型にかかわらず比較的共通に使われている引数が何種類か存在します。 ,引数名,説明,備考 ,[CODE(MIME)[[[charset]]]],Charset ,[CODE(MIME)[[[x-mac-creator]]]],作成プログラム識別子 ([[Macintosh]]) ,[CODE(MIME)[[[x-mac-type]]]],型 (Macintosh) ,[CODE(MIME)[[[name]]]],[[ファイル名]],[CODE(MIME)[[[Content-Disposition]]]] の [CODE(MIME)[[[filename]]]] 引数を使用する'''べき''' ,[CODE(MIME)[[[x-unix-mode]]]],[[アクセス権]] ([[Un|x]]) [9] [CODE(MIME)[[[charset]]]] 引数は、 MIME 本体規格でも特別に定義されている引数です。 MIME では [CODE(MIME)[[[text/[VAR[*]]]]]] で使うことを規定していますが、 他の媒体型でも同じ、または似た意味でよく使われます。 [18] [CODE(MIME)[[[name]]]] 引数は、古い MIME の規格で [CODE(MIME)[[[application/octet-stream]]]] などごく一部の媒体型に定義されていましたが、 任意の媒体型で[[ファイル名]]を指定するためのものとして間違って実装されました。 現在の MIME には [CODE(MIME)[[[Content-Disposition]]:]] 欄に [CODE(MIME)[[[filename]]]] 引数があり、最近のほとんどの [ABBR[[[UA]]][利用者エージェント]]はそちらに移行しています。 [10] [CODE(MIME)[[[x-unix-mode]]]] は [SAMP(MIME)[0777]] のように [[Un|x]] におけるファイルの [[permission]] を指定するようです。 [[AppleMail]] などが使用していることがわかっています。 [CODE(MIME)[[[x-mac-creator]]]] と [CODE(MIME)[[[x-mac-type]]]] は、 Macintosh の[[ファイル・システム]]の属性を記述するようです。 [CODE(MIME)[[[application/applefile]>>1]]] をご覧下さい。 これら3つの引数は、本来は [CODE(MIME)[[[Content-Disposition]]:]] 欄に入れたほうが良い情報かもしれません。 [[#comment]] ** 実装 [[#comment]] *** パラメーター不認識問題 [1] 主に古い時代の [[HTTP]] [[UA]] において、パラメーターの存在を知らないためにうまく扱えないことがあります。 単に無視するだけならまだ良いのですが、中にはパラメーターも含めて一つの[[媒体型]]とみなし、例えば [CODE[text/html;charset=iso-2022-jp]] という媒体型と認識し、保存しますか? と聞いてきたりします。 [2] [[Mosaic]] variant にこういうのがいるみたいです。 古い Mosaic は対応していなかったんでしょうか? 同じ 1996年の Mosaic でも、 MosaicView ([[NEC]]) はちゃんと扱えるのに Infomosaic ([[富士通]]) は扱えなかったりします。 [3] ちなみに、古い [[NN]] (2以前) は [[charsetパラメーター]]の扱いにまた別の問題があります。 - [12] 古い [[UA]] には、 [SAMP[text/html;charset=iso-2022-jp]] ではなく [SAMP[text/html; charset=iso-2022-jp]] になっていないと認識しない困ったちゃんがいるらしいです。 - [13] [[application/x-www-form-urlencoded]>>1] にも同様の問題が存在します。おそらく潜在的に少なからぬ数の [[UA]] (おそらく大多数は特定目的の tool か古代の [[WWW]] ブラウザ。) が、パラメータの存在により誤動作又は動作しなくなる虞があります。 [[#comment]] ** 歴史 RFC 1049 の CT: は MIME の CT: とは互換性がありません。 また、 1049 の型の全てに対応する Internet (MIME) 媒体型が 定義されたわけでもありません。 幾ら RFC 1049 が実際にはあまり使われなかったとはいえ、 ひどい処遇です。 son-of-RFC1036 は RFC 1341 を参照していて、別途 CT: 領域を定義していません。 usefor-article もそうです。 HTTP の定義は RFC 2045 と同じ物ですが、 RFC 2231 の拡張に 追随していません。 CGI の定義は HTTP と同じです。 [[MIME//parameter値拡張]] RFC 2184, RFC 2231 により Content-Type: 領域の parameter の定義などが 修訂されました。実際にはあまり実装されていません。 [[#comment]] ** 関連 [25] [[XML]] で[[要素]]の[[内容]]として [[Base16]] または [[Base64]] で含められたものの[[媒体型]]を記述するための [CODE(XMLa)[[QN[xmlmime:[[contentType]]][http://www.w3.org/2005/05/xmlmime]]]] [[属性]]があります。取り得る値は [[RFC 2045]] ([[MIME]]) の [CODE(MIME)[[[Content-Type]]:]] 欄本体と同じです。 (特に注記がないから [CODE(ABNF)[[[LFWS]]]] も認められるのか!?) [CITE[Describing Media Content of Binary Data in XML]] [[#comment]] ** メモ - [1] [WEAK[2002-11-15 (金) 17:27]] ''[[名無しさん]]'': RFC 1049 は (MIME が出たかなり後まで) Internet Standard でしたが、いつのまにか histrical に降格していました。 - [2] [[MIME]] では Content-Type: 欄の[[本体]]の値が[[媒体型]]です。 - [3] >>2 より媒体型のことを Content-Type あるいは内容型と呼ぶことがあります。まあ間違いではありません。好んでそう呼ぶ人も中にはいます。 - [17] [WEAK[2003-10-10 00:54:11 +00:00]] ''[[名無しさん]]'': で41位、日本語2位。最近この WikiPage 読む人が多いのはそのせいか。 [20] [CITE[Microsoft Windows XP Service Pack 2 での機能の変更点 : ブラウズのセキュリティ強化]] [ABBR[[[WinIE]]][[[Internet Explorer]] ([[Windows]] 版)]] の型判別の仕様が変更されたそうです。相変わらず [CODE(HTTP)[Content-Type]] 以外の情報を使うようですが、以前より幾分ましにはなっている模様。 [[#comment]] * メモ