本記事は以下の書籍から OSI 参照モデルのレイヤ6 プレゼンテーション層について説明します。
最もおすすめの書籍
有名な書籍
前者2つよりも難易度が高め
OSI 参照モデルやその他のレイヤの解説については以下の記事をご確認ください。
- 【入門】OSI 参照モデル、TCP/IP とは
- 【OSI 参照モデル レイヤ1 物理層】イーサネットとは
- 【OSI 参照モデル レイヤ2 データリンク層】イーサネットとは
- 【OSI 参照モデル レイヤ3 ネットワーク層】IP とは
- 【OSI 参照モデル レイヤ4 トランスポート層】TCP/UDP とは
- 【OSI 参照モデル レイヤ5 セッション層】SSL/TLS とは
- 【OSI 参照モデル レイヤ6 プレゼンテーション層】MIME とは ←イマココ
- 【OSI 参照モデル レイヤ7 アプリケーション層】
プレゼンテーション層
プレゼンテーション層とは、データを適切な形式に変換(ファイルを圧縮したり、文字コードを変換したり)する層です。
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 の一覧は以下のとおりです。

Content-Transfer-Encoding
Content-Transfer-Encoding は、エンコード方式を指定します。
Content-Transfer-Encoding では、主に以下の項目が指定されます。
Content-Transfer-Encoding | 説明 |
7bit | 7bit の文字列 ASCII コード など |
8bit | 8bit の文字列 UTF-8 など |
binary | バイナリデータ |
base64 | base64(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層目のプレゼンテーション層に関する説明は以上となります。
他のレイヤについては以下をご覧ください。
- 【入門】OSI 参照モデル、TCP/IP とは
- 【OSI 参照モデル レイヤ1 物理層】イーサネットとは
- 【OSI 参照モデル レイヤ2 データリンク層】イーサネットとは
- 【OSI 参照モデル レイヤ3 ネットワーク層】IP とは
- 【OSI 参照モデル レイヤ4 トランスポート層】TCP/UDP とは
- 【OSI 参照モデル レイヤ5 セッション層】SSL/TLS とは
- 【OSI 参照モデル レイヤ6 プレゼンテーション層】MIME とは ←イマココ
- 【OSI 参照モデル レイヤ7 アプリケーション層】
参考資料・おすすめの書籍
最もおすすめの書籍
有名な書籍
前者2つよりも難易度が高め