読者です 読者をやめる 読者になる 読者になる

MIMEとAddTypeのメモ

PHPセットアップ中にでてきたAddTypeについてと、AddTypeを知るために理解しなきゃいけないMIMEについて。

MIMEタイプ

AddTypeがどんなことをするのかはまずMIMEタイプっていうのを理解しないといけない。以下引用。

Webの世界では拡張子という概念と、もうひとつ『MIMEタイプ』という概念があります。MIMEタイプとは「タイプ名/サブタイプ名」の形式の文字列で、WEBサーバーとWEBブラウザの間はこのMIMEタイプを用いてデータの形式を指定しています。例えばMIMEタイプには以下のようなものがあります。
ファイル形式   一般的な拡張子   MIMEタイプ
テキスト    .txt    text/plain
HTML文書  .htm .html  text/html
XML文書   .xml    text/xml
JavaScript  .js text/javascript
VBScript    .vbs    text/vbscript
CSS .css    text/css
GIF画像   .gif    image/gif
JPEG画像  .jpg .jpeg  image/jpeg
PNG画像   .png    image/png
CGIスクリプト  .cgi    application/x-httpd-cgi
Word文書  .doc    application/msword
PDF文書   .pdf    application/pdf

このタイプを定義しておかないとサーバーがあるファイルに対してそれのファイル形式を読み取ることが出来ないってことだろう。

言い換えればこのMIMEタイプの定義ファイル、mime.typesがコンピュータに対して「このファイルはこの形式ですよー」って教える役割を持っているということ。

中身確認してみよう。パスは(CentOSの場合)、/etc/mime.typesのよう。

$ cat /etc/mime.types 

# This is a comment. I love comments.

# This file controls what Internet media types are sent to the client for
# given file extension(s).  Sending the correct media type to the client
# is important so they know how to handle the content of the file.
# Extra types can either be added here or by using an AddType directive
# in your config files. For more information about Internet media types,
# please read RFC 2045, 2046, 2047, 2048, and 2077.  The Internet media type
# registry is at <http://www.iana.org/assignments/media-types/>.

# MIME type         Extension
application/EDI-Consent
application/EDI-X12
application/EDIFACT
...

ここにしっかりと書いてあった。「クライアントに正しいメディアタイプを教えることは非常に重要である」とある。うん、クライアントがそのファイルを正しく扱うためにこの情報が必要なのか。

httpでリクエストがきて、サーバーは返すファイルの形式に寄ってこのMIMEタイプの情報を付与する。クライアント側に取ってはhtmlファイルもphpファイルもテキストでしかない?ってことなのかな。だからそれがなんのファイル形式であるかを伝えることが重要、と。httpdリクエストのヘッダーフィールドに付与される情報なのかな。

というか "I love comments" ってなんだw

AddType

AddTypeの意味は以下とかかが分かりやすいかも。

http://www.adminweb.jp/apache/docroot/index4.html

http://mikeneko.creator.club.ne.jp/~lab/web/htaccess/mime.html

クライアントからリクエストがあったファイルに対して、WWWサーバはファイルの内容を返すと同時にそのファイルがどのような種類のファイルなのかを合わせてクライアントへ返します。その結果、クライアント側は取得したデータを適切な表示方法で扱うことが出来るようになります。

基本となるMIMEタイプと拡張子の組み合わせはデフォルトでは「mime.types」ファイルで登録されています。このファイル名及び設置ディレクトリは「TypesConfig」で設定されています。

既に登録されている拡張子の他に、別の拡張子に対するMIMEタイプを追加で登録することが出来ます。その場合は「mime.types」に追加で記述する代わりに「httpd.conf」ファイル内で「AddType」を使って記述することが推奨されています。

今までこういうのって、記事を見つけてコピペして動いてよっしゃ、で終わってたので、サーバーもきちんと勉強しなくちゃと思った。。。