教程

https://www.cnblogs.com/jsean/articles/1610265.html
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types
最近在读 Golang 的源码,看到 mime.go 这个文件时,有点看不懂了。

MIME 简介

MIME, Mutipurpose Internet Mail Extensions,多用途 Internet 邮箱扩展。MIME 是描述消息内容类型的 internet 标准。在创建之初,是为了在发送电子邮件时附加多媒体数据,让邮件客户程序根据其类型进行处理。现在 MIME TYPE 被 HTTP 协议支持后,使得HTTP能够传输各种各样的文件。

浏览器与 MIME-TYPE

浏览器通过 MIME TYE,也就是该资源的媒体类型,来决定以什么形式显示数据。
媒体类型通常是通过 HTTP 协议,由 Web 服务器请求头中的 Content-Type 来告知浏览器数据类型的,比如:

  1. Content-Type: text/HTML

表示内容是 text/HTML 类型,也就是超文本文件。注意,必须是 “text/HTML” 而不是 “HTML/text”.因为 MIME 是经过 ietf 组织协商,以 RFC 的形式发布在网上的。

自定义的类型

需要注意的是:只有一些在互联网上获得广泛应用的格式才会获得一个 MIME Type,如果是某个客户端自己定义的格式,一般只能以 application/x- 开头。
Internet 中有一个专门组织来对 MIME 标准进行修订,但是由于 Internet 发展过快,很多应用程序便使用在类别中以 x- 开头的方法标识这个类别还没有成为标准,例如 x-gzip,x-tar等。
其实是不是标准无关紧要,只要客户端和服务器都能识别这个格式就可以了。在 app 端会使用自定义标准来保证数据安全。
MIME类型与文档的后缀相关,因此服务器使用文档的后缀来区分不同文件的 MIME 类型,服务器中必须规定文件后缀和MIME类型之间的对应关系。而客户端从服务器上接收数据的时候,它只是从服务器接收数据流,并不了解文档的名字,因此服务器需要使用附加信息来告诉客户程序数据的 MIME 类型。服务器将首先发送以下两行 MIME 标识信息,这个信息并不是真正的数据文件的一部分。

  1. Context-type: text/html

注意,第二行为一个空格,这是必须的,使用这个空行的目的是将 MIME 信息与真正的数据内容分离开。

MIME TYPE语法 及常见分类

通用结构:type/subtype
MIME 类型对大小写不敏感,但是通常传统写法是小写。
分类

分类 描述 典型类型
text 表明是普通文本 text/plain, text/html, text/css, text/javascript
image 表示是某种图像,不包括视频文件,但是包括动态图 image/gif /image/png, image/jpeg, image/bmp, image/webp
audio 音频文件 audio/midi, audio/mpeg, audio/webm, audio/ogg, audio/wav,
video 表示某种视频文件 video/webm, video/ogg
application 表示某种二进制数据 application/octet-stream,/pkcs12, application/vnd.mspowerpoint, application/xhtml+xml, application/xml, application/pdf,application/json

对于 text 文件类型若是没有特定的 subtype,就使用 text/plain, 类似的二进制文件如果没有特定或已知的 subtype,就使用 application/octet-stream.

 重要的 MIME 类型

text/plain
文本文件默认值,意思是未知的文本文件,浏览器认为是可以直接展示的。

text/css
任何一个 CSS 文件想要在网页上被解释执行就必须设为 text/css 文件。如果服务器将 MIME 类型设置为 text/plain 或 application/octet-stream 发送,这种情况下,文件并不能被浏览器识别为 CSS 文件并且会被直接忽略。

text/html
所有的 HTML 内容都应该使用这种格式。

图片类型

MIME 类型 图片类型
image/gif GIF 图片
image/jpeg JPEG图片
image/png PNG图片
image/svg+xml SVG 图片(矢量图)

还有非MIME 类型,但是比较通用的 icon 类型,image/x-icon