教程
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 来告知浏览器数据类型的,比如:
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 标识信息,这个信息并不是真正的数据文件的一部分。
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