【OSI 参照モデル レイヤ6 プレゼンテーション層】MIMEとは

本記事は以下の書籍から OSI 参照モデルレイヤ6 プレゼンテーション層について説明します。

最もおすすめの書籍

有名な書籍

前者2つよりも難易度が高め

OSI 参照モデルやその他のレイヤの解説については以下の記事をご確認ください。

スポンサーリンク

プレゼンテーション層

プレゼンテーション層とは、データを適切な形式に変換(ファイルを圧縮したり、文字コードを変換したり)する層です。

TCP/IP には対応する層が存在せず、アプリケーション層で実装されることが多いです。

OSI 参照モデルのプレゼンテーション層に相当する規格として、HTTP や電子メール(SMTP 等)のデータ転送で利用する MIME(Multipurpose Internet Mail Extensions)と呼ばれる規格があります。

スポンサーリンク

MIME とは

MIME とは、電子メールで日本語や絵文字やバイナリデータ(画像や音楽ファイル)等を扱えるようにする拡張仕様です。
一部機能は HTTP に流用されており、ファイルの形式(画像、音楽、動画等)を指定するために利用されています。

当初、電子メールでは、ASCII コード(英数字といくつかの記号)しか利用できませんでした。MIME は、電子メールで UTF-8 (日本語や絵文字)等の文字コードを指定可能としました。

また、電子メールは文字データを送信する前提の作りでしたが、MIME でバイナリデータ(画像や音楽ファイル)を許容する仕様が追加されました。

MIME で利用するヘッダ

ここでは、電子メールで利用する MIME ヘッダについて説明を行います。HTTP で利用する MIME タイプとは仕様が異なる場合があります。

MIME-Version

MIME-Version は、MIME のバージョンを表します。
現在は Version 1.0 しかないので気にする必要はありません。

Content-Type

Content-Type は、以下の書式でデータの種類を指定を表します。

Content-Type: type/subtype; parameter

Content-Type は HTTP でも利用されており、代表的な種類に以下のようなものがあります。

Content-Type説明
text/html; charset=UTF-8文字コードはUTF-8 の html 形式の text
image/jpeg; name="<ファイル名>"jpeg の画像ファイル
multipart/mixed;色々なタイプのデータが混ざっている
multipart/alternative;HTML 形式と plan テキストの2種類がデータに存在

HTTP における Content-Type の一覧は以下のとおりです。

MIME タイプ (IANA メディアタイプ) - HTTP | MDN
メディアタイプ (別名 Multipurpose Internet Mail Extensions または MIME タイプ) は、文書、ファイル、またはバイト列の性質や形式を示します。 MIME タイプは IETF の RFC 6838 で定義され、標準化されています。

Content-Transfer-Encoding

Content-Transfer-Encoding は、エンコード方式を指定します。

Content-Transfer-Encoding では、主に以下の項目が指定されます。

Content-Transfer-Encoding説明
7bit7bit の文字列 ASCII コード など
8bit8bit の文字列 UTF-8 など
binaryバイナリデータ
base64base64(ASCII コードしか使えない場合、バイナリデータを ASCII 文字列に変換するために利用)

MIME マルチパート

MIME マルチパートは、複数のデータ形式(html、通常テキスト、画像など)を持つ電子メールを、データ形式ごとに複数のパートに分ける方法です。
パートは boundary と呼ばれる区切り文字を利用します。

実際にメールを送信し、MIME のデータを確認してみましょう。

添付ファイル:1_l.jpeg
本文:「本文です」

gmail で上記のメールの「メッセージのソースを表示」を選択すると以下のように表示されます。

Content-Type: multipart/mixed; boundary="0000000000004553ed05ca6294d8"
# multipart/mixed; から文字やバイナリ(画像)が混ざっていることがわかります。
# また区切り文字が「0000000000004553ed05ca6294d8」であることもわかります。
--0000000000004553ed05ca6294d8
Content-Type: multipart/alternative; boundary="0000000000004553e905ca6294d6"
# multipart/mixed; 用の区切り文字から開始
# HTML と プレーンテキストが混ざっていることがわかります。
# multipart/alternative;用の区切り文字は"0000000000004553e905ca6294d6"です。

--0000000000004553e905ca6294d6
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: base64

5pys5paH44Gn44GZ44CCDQo=
# multipart/alternative;用の区切り文字から text/plain を開始
# プレーンテキストで文字コードは UTF-8, エンコードは base64 であることがわかります。
# 以下のコマンドより、base64 でエンコードされた「5pys5paH44Gn44GZ44CCDQo=」は
#「本文です。」ということがわかります。
# $ echo 5pys5paH44Gn44GZ44CCDQo=|base64 -d
# 本文です。

--0000000000004553e905ca6294d6
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: base64

PGRpdiBkaXI9Imx0ciI+5pys5paH44Gn44GZ44CCPGJyPjwvZGl2Pg0K
# multipart/alternative;用の区切り文字から text/html を開始
# html 版のテキストです。
# 以下のコマンドより、base64 でエンコードされた内容は
#「<div dir="ltr">本文です。<br></div>」ということがわかります。
# $ echo PGRpdiBkaXI9Imx0ciI+5pys5paH44Gn44GZ44CCPGJyPjwvZGl2Pg0K|base64 -d
# <div dir="ltr">本文です。<br></div>

--0000000000004553e905ca6294d6--
# multipart/alternative;用の区切り文字終了(語尾が「--」のため)
--0000000000004553ed05ca6294d8
Content-Type: image/jpeg; name="1_l.jpg"
Content-Disposition: attachment; filename="1_l.jpg"
Content-Transfer-Encoding: base64
# multipart/mixed; 用の区切り文字開始
# データは jpeg の画像でファイル名は"1_l.jpg"であることがわかります。
# エンコード方式は base64 であることがわかります。

--0000000000004553ed05ca6294d8--
# multipart/mixed; 用の区切り文字終了
スポンサーリンク

その他のレイヤについて

OSI 参照モデルの6層目のプレゼンテーション層に関する説明は以上となります。

他のレイヤについては以下をご覧ください。

参考資料・おすすめの書籍

最もおすすめの書籍

有名な書籍

前者2つよりも難易度が高め

Multipurpose Internet Mail Extensions - Wikipedia
3 Minutes Networking
ネットワークエンジニアとして
ネットワークエンジニアに必要なネットワーク技術とCisco・Juniper・F5製品の技術解説。NWエンジニアの仕事内容や年収を紹介。ネットワークスペシャリスト、CCNA/CCNP/CCIEの情報発信。