対象: Navigator および Communicator (全バージョン)
Operating Systems: MacOS, UNIX, Windows 3.x, Windows 95, WindowsNT.

MIME チュートリアル

はじめに。
MIME (Multipurpose Internet Mail Extensions) は、インターネットのページや、インターネット・メール、ニュースグループなどで、頻繁に見かける用語です。この用語を理解するには、インターネットでデータがどのように送られ、また受け手側のソフトウェアがデータをどのように解釈するか、についての基礎的知識を得る事が重要です。この文書では、単純な方法ではありますが、多くの質問の解答になるであろうという希望の元に、MIME の基礎的な使われ方について解説します。

MIME とは何か?
インターネットでは、データは、1バイト8ビットで送られます。受け手側のソフトは、このバイト群を受け取り、正しい順番に並べます。ここで、「これらは何を表しているのだろう?」という疑問が生じます。それは文章でしょうか? 画像でしょうか? あるいは音楽でしょうか? これが何を意味しているかを知るには、どうしたらよいのでしょう? 仮に、内容を表すバイト群に加えて、データが何を表しているのかを示す数バイトが一緒に送られてきたらどうでしょう。これがあれば、受け手側のソフトや受け手その人は、メッセージを構成するバイト群が何であるかを知る事ができます。MIME の役割はまさにこれです。MIME は、メッセージに何が含まれているかを知らせるものであり、これによりメッセージの内容は適切な方法で表示されるのです。

MIME はどんな風に見られるのか?
最も簡単なのは、メールとニュースから始めることでしょう。メールのメッセージを見ると、その冒頭にたくさんの記述があります。一例を挙げましょう。

   From - Tue Apr  1 09:39:21 1997

   Received: from cantor (ppp-phx-15.futureone.com [207.2.43.15])

      by future.futureone.com (8.8.2/8.8.0) with ESMTP id JAA23032 for

      Tue, 1 Apr 1997 09:36:14 -0700 (MST)

   Received: from cantor (localhost [127.0.0.1]) by cantor (8.7.4/8.7.3)

      with SMTP id JAA00568 for ; Tue, 1 Apr 1997

      09:38:57 -0700

   Sender: chucksimmons@futureone.com

   Message-ID: <33413A21.412D43B3@futureone.com>

   Date: Tue, 01 Apr 1997 09:38:57 -0700

   X-UIDL: 859912584.000

   From: Chuck Simmons 

   Organization: Organized? You jest!

   X-Mailer: Mozilla 3.01 (X11; U; Linux 2.0.0 i486)

   MIME-Version: 1.0

   To: Chuck Simmons 

   Subject: Test of from

   Content-Transfer-Encoding: 7bit

   Content-Type: text/plain; charset=us-ascii

   Status: U

   X-Mozilla-Status: 0001

   Content-Length: 367
いろいろ記述されていますが、MIME に関係しているのは二つだけです。その二つとは、Content-Transfer-Encoding: と Content-Type: です。ここで、Content-Type: に注目しましょう。このアイテムは、どのようなデータが送られてきたかを示すものです。このメッセージでは、データは「text/plain」です。もうおわかりでしょう。「text/plain」が、このメッセージのMIME タイプです。「text」の部分はMIME タイプと呼ばれ、「plain」の部分はMIME サブタイプと呼ばれます。タイプとサブタイプの間は、常に「/」で分けられます。一つのタイプは多数のものを含みます。text にはいろんな種類があります。サブタイプは限定的です。plain text は、一種類しかありません。(character set も限定的ですが、現在の議論には重要ではありません)

一般的な MIME タイプは?

    text/plain                  通常のメールやニュース



    text/html                   ウェッブ上などのHTML 文書



    image/jpeg                 一般的な画像フォーマット



    image/gif                   これも一般的な画像フォーマット



    application/octet-stream    未知のタイプ、ある種のデータ群



    audio/midi                  midi フォーマット



    audio/x-midi               midi フォーマットの別の表現



    application/ps             PostScript 文書を示す
このリストは、多数あるMIME タイプの中から、ごくわずかを挙げたに過ぎません。インターネットにはもっと詳しいリストがいくつもあります。一例を挙げれば:
http://home.netscape.com/assist/helper_apps/mimedefault.html (訳注:もちろん英語です)

MIME タイプがわかれば、データはすぐに使えるのか?
メールとニュースでは、多くの場合、否です。World Wide Web では、たいてい使えます。ここに、Content-Transfer-Encoding: の必要性が生じるのです。World Wide Web では、データは1バイト8ビットで送られるので、エンコーディングの必要はありません。メールとニュースは、7ビットで送られるので、8ビットを7ビットの中に詰め込まねばなりません。Content-Transfer-Encoding: は、これがどのように行なわれたかを表示するものです。良く使われるエンコーディングは、uuencode と base64 ですが、他の方法も存在します。

従って、データが使えるようになるには、まず Content-Type: がわかっていなければならず、Content-Transfer-Encoding: も、もしあれば、わかっている必要があります。両方がわかっている事により、インターネット・アプリケーションは、データを解読し、適切なビューアーや他のプログラムに送ったり、ディスクのファイルとして保存したりする事ができるのです。

NETSCAPE と MIME について調べるには?
Netscape がどのようにして MIME メッセージを扱うか、を知るための最も良い場所は、
http://home.jp.netscape.com/ja/eng/mozilla/3.0/relnotes/unix-3.01.html#MIME
でしょう。(訳注:原文では英語版へのリンクですが、日本語版リリースノートへのリンクに変更しました)
ここでの話題はやや詳細ですが、上記した情報がこの内容を理解する手助けになるでしょう。

WORLD WIDE WEB の MIME については?
この質問は、ブラウザを特定しないと答えられないので、Netscape 製品に関する検討になります。

ブラウザからデータの要求があった場合、World Wide Web サーバーは、データを送る前に、それに関する情報を送ります。例えば、

    HTTP/1.0 200 OK

    Date: Thu, 10 Apr 1997 00:04:30 GMT

    Server: Apache/1.1.0

    Content-type: text/html

    Set-Cookie: Apache=localhost349860630670983; path=/

    Content-length: 2719

    Last-modified: Fri, 13 Dec 1996 18:45:59 GMT
"Content-type: text/html" に注目してください。これによりブラウザは、次に来るデータはHTML 文書として解釈するべきであるということを知るのです。

別の例を挙げれば、

    HTTP/1.0 200 OK

    Date: Thu, 10 Apr 1997 00:08:51 GMT

    Server: Apache/1.1.0

    Content-type: audio/midi

    Set-Cookie: Apache=localhost244860630931311; path=/

    Content-length: 30178

    Last-modified: Wed, 19 Jun 1996 23:28:43 GMT
この例では、ブラウザは音楽ファイルが来ると予告されます。ブラウザは、プラグインを使ったり、ヘルパーアプリケーションを起動したり、ユーザーがこのデータを扱う方法を選択するためのダイアログボックスを表示したりする事ができるのです。

何故 NETSCAPE は *.BLAH を認識できず、IE は認識できるのか? (訳注:blah=ばかばかしい事、たわごと)
Netscape は、様々なプラットフォームやOSからなるネットワーク上で、正しく動作するように設計されています。厳密に言えば、*.blah はインターネットのあちこちにある様々なプラットフォーム上では、何の意味も持ちません。Netscape は Content-type: を信用し、ファイルの拡張子を無視する事を選択しました。マイクロソフトのインターネット・エクスプローラーは Content-type: を無視する傾向があり、要求によって送られた情報の中にあるファイルの拡張子から中身を推測します。Content-type: を用いてメッセージの内容を特定する事は、World Wide Web テクノロジーの重要な部分です。これにより、ネットワークを構成する色々な機種の要求を満たしながら、より汎用的な方法で内容を伝達する事が可能となるのです。HTTP の種々のヘッダー・アイテムに対するソフトウェアの動作については、いくつもの RFC に記載されています。特に、World Wide Web でデータタイプを特定する手段としての Content-type: の役目については、これらの文書で明確に説明されています。
(訳注:RFC=Request For Comments。インターネットの各種プロトコルに関する標準化仕様を策定するIETFが発行するドキュメントの名称。)

FTP についてはどうか?
FTP はいろいろな点でHTTP と異なっていますが、なかでも、FTP サーバーは Content-type ヘッダーを送りません。従って、FTP を経由して送られたファイルが、受け手のシステムで特別なアプリケーションで扱われなければならない場合、アプリケーションの選択は拡張子に基づいて行なわれる事になります。システムが異なる場合、その選択が有効でない場合も起こり得ます。幸いにして、この選択が誤っている場合や、いずれにせよファイルをダウンロードしたい場合には、シフト+クリックや他の方法によってダウンロードできる事が普通です。ダウンロードした後、ユーザーはファイルをリネームするなどの手段で、ファイルを適切に扱うことができるでしょう。

なぜ添付ファイルがでたらめなテキストとして表示されるのか?
これは、Content-type: がデータと一致していない場合に生じます。例えば、もしContent-type: が image/jpeg でなければならないのに text/plain になっている場合、Netscape は text/plain が正しいものと推測し、エンコードされたデータを表示します。この場合、添付ファイルをディスクに保存し、デコード・ソフトを使ってイメージファイルが使えるようにします。この現象は、Content-Transfer-Encoding: が正しくない場合にも生じ、Netscape は壊れたイメージのアイコンを表示したり、上記のようなテキストを表示したりします。

もし、Content-Type: が失われたら?
この場合、Netscape はメッセージにエンコードされたデータがあるかもしれないと考え、この情報をデコードできる場合もありますが、できない場合もあります。このような場合、メッセージをディスクに保存し、デコード・ソフトを使用することはできるでしょう。

UUENCODED された文書を送れますか?
ファイルシステムのネーミング方法によって異なります。uuencode されたファイルを、Windows 95/NT の場合は .jpg.uu、UNIX の場合は .jpg.uue として送ると、たいていの場合正しい情報が送られます。残念ながら、この方法は、ファイル名で複数の拡張子が使えるシステムに限定されます。

もっと詳しく知るには?
検索エンジンを使いましょう。この文書を書く際に私もそうしました。RFC 文書は、全てのインターネット問題に関する最終権威です。MIME については、 RFC 2045: (MIME) "Part One: Format of Internet Message Bodies" および RFC 2046: (MIME) "Part Two: Media Types" が最も重要です。検索エンジンを使えば、インターネットの全ての面に関する詳細な文書が見つかるでしょう。多くの場合、ここで私が提示した基本的な概念が役立つと思います。
 
 

CGI に関する情報

CGI について.
CGI (Common Gateway Interface) は、ウェッブページの作者が、ブラウザに情報を送るためにサーバー上に置かれたプログラムを操作できる方法です。サーバーは HTTP レスポンスヘッダーの一部を供給しますが、残りの部分は CGI プログラムが必要に応じて供給しなければなりません。CGI プログラムによって供給されるヘッダー情報の例を挙げれば、

    Content-type: text/html

    Location: http://somewhere.domain/.

これらは、使われる際に、ブラウザに対して、ヘッダーが完了し、データが続くという事を警告する新しい2行が続かなければなりません。CGI プログラムは、データを送るか、ブラウザを別の場所へ導かねばなりません。上の最初の例は、データが続く例です。第二の例は、ブラウザを http://somewhere.domain/. に誘導する例です。CGI プログラムの例は、World Wide Web に数多くあります。http://www.yahoo.com/ に行けば、多くの参考文献とアプリケーションが見つかるでしょう。

ブラウザにファイルの拡張子が何かを知らせるには?
これにはちょっとした技が必要です。あなたが使っているURL が、

    http://my.domain/cgi-bin/my_CGI_application
であり、拡張子が .blah なら、
    http://my.domain/cgi-bin/my_CGI_application/x.blah
を使いましょう。これにより、いくつかのブラウザで拡張子が正しく認識されます。

CGI のファイル名を保持するには?
これは上記の応用です。あなたは、別の CGI アプリケーションにリダイレクトしなければなりません。例えば、

    location: http://my.domain/cgi-bin/my_CGI_application_2/my_file.blah
ここで、my_file.blah が目的のファイル名です。my_CGI_application_2 というアプリケーションが、CGI の PATH_INFO 環境変数からファイル名を読み取り、適切な Content-type: とともに my_file.blah を送ります。
 

Chuck Simmons


最終更新 1998/11/16

第1部の目次へ戻る

UFAQ日本語版の目次へ戻る


翻訳および編集 池田譲治

The UFAQ Japanese edition is translated & edited by Joji Ikeda.