MIME类型学习

MIME类型

引言:

MIME(Multipurpose Internet Mail Extensions),本文将介绍 MIME 类型的概念,探讨它在 Web 开发中的应用,并提供一些实用的例子和建议。

什么是MIME类型

媒体类型(也通常称为多用途互联网邮件扩展MIME 类型)是一种标准,用来表示文档、文件或一组数据的性质和格式。每种 MIME 类型都由一个唯一的字符串标识,如 text/html 表示 HTML 文档,image/jpeg 表示 JPEG 图像。

MIME类型的结构

MIME 类型通常包含三个部分内容:类型(type)、子类型(subtype)、以及一个可选的参数(parameter=value),类型与子类型中间由斜杠 / 分割,而可选参数则使用 分割,中间没有空白字符。

type/subtype;parameter=value
  • 类型代表数据类型所属的大致分类,例如 videotext
  • 子类型所代表的指定类型的确切数据类型。以 text 类型为例,它的子类型包括:plain(纯文本)、htmlHTML 源代码)、calender(iCalendar/.ics 文件)。
  • 可选参数能够提供额外信息,例如 text 类型,可以添加可选的 charset 参数(charset=utf-8),以指定数据中的字符所使用的字符集。

MIME类型的作用

它决定了浏览器如何处理从服务器发送到客户端的文件。通过正确设置 MIME 类型,可以确保浏览器能够正确地解析和显示文件内容。例如,浏览器将 text/html 类型的文件解析为 HTML 文档,并按照 HTML 标准进行渲染;将 image/jpeg 类型的文件解析为 JPEG 图像,并显示在页面上。

类型(type)的分类

类型可分为两类:独立的(discrete)和多部分的(multipart)。独立类型代表单一文件或媒介,比如一段文字、一个音乐文件、一个视频文件等。而多部份类型,可以代表由多个部件组合成的文档,其中每个部分都可能有各自的 MIME 类型;此外,也可以代表多个文件被封装在单次事务中一同发送。多部分 MIME 类型的一个例子是,在电子邮件中附加多个文件。

独立类型

代表单一文件或媒介,比如一段文字text、一个音乐文件audio、一个视频文件video等, 单一类型示例:

Content-Type:text/html

IANA 目前注册的独立类型如下:

  • application

    不明确属于其他类型之一的任何二进制数据;要么是将以某种方式执行或解释的数据,要么是需要借助某个或某类特定应用程序来使用的二进制数据。通用二进制数据(或真实类型未知的二进制数据)是 application/octet-stream。其他常用的示例包含 application/pdfapplication/pkcs8application/zip。(查看 IANA 上 application 类型的注册表

  • audio

    音频或音乐数据。常见的示例如 audio/mpegaudio/vorbis。(查看 IANA 上 audio 类型的注册表

  • example

    在演示如何使用 MIME 类型的示例中用作占位符的保留类型。这一类型永远不应在示例代码或文档外使用。example 也可以作为子类型。例如,在一个处理音频有关的示例中,MIME 类型 audio/example 表示该类型是一个占位符,且在实际使用这段代码时,此处应当被替换成适当的类型。

  • font

    字体/字型数据。常见的示例如 font/wofffont/ttffont/otf。(查看 IANA 上 font 类型的注册表

  • image

    图像或图形数据,包括位图和矢量静态图像,以及静态图像格式的动画版本,如 GIF 动画或 APNG。常见的例子有 image/jpegimage/pngimage/svg+xml。(查看 IANA 上 image 类型的注册表

  • model

    三维物体或场景的模型数据。示例包含 model/3mfmodel/vrml。(查看 IANA 上 model 类型的注册表

  • text

    纯文本数据,包括任何人类可读内容、源代码或文本数据——如逗号分隔值(comma-separated value,即 CSV)格式的数据。示例包含:text/plaintext/csvtext/html。(查看 IANA 上 text 类型的注册表

  • video

    视频数据或文件,例如 MP4 电影(video/mp4)。(查看 IANA 上 video 类型的注册表

对于那些没有明确子类型的文本文档,应使用 text/plain。类似的,没有明确子类型或子类型未知的二进制文件,应使用 application/octet-stream

多部分类型

多部分类型,可以代表由多个部件(比如多段文字、多个音乐文件、多个视频文件等)组合成的文档,其中每个部分都可能有各自的单一类型的 MIME 类型;此外,也可以代表多个文件被封装在单次事务中一同发送,多部分类型示例:

Content-Type: multipart/form-data; boundary=aBoundaryString  // boundary表示多个部分实体的分割符

--aBoundaryString  // 分隔符
Content-Disposition: form-data; name="myFile"; filename="img.jpg"
Content-Type: image/jpeg  // 每个部分都可能有各自的单一类型的 MIME 类型
(data)

--aBoundaryString // 分隔符
Content-Disposition: form-data; name="myField"; filename="test.mp4"
Content-Type: video/mp4 // 每个部分都可能有各自的单一类型的 MIME 类型
(data)

--aBoundaryString // 分隔符

有两种多部分类型:

  • message

    封装其他信息的信息。例如,这可以用来表示将转发信息作为其数据一部分的电子邮件,或将超大信息分块发送,就像发送多条信息一样。例如,message/rfc822(用于转发或回复信息的引用)和 message/partial(允许将大段信息自动拆分成小段,由收件人重新组装)是两个常见的例子。(查看 IANA 上 message 类型的注册表

  • multipart

    由多个组件组成的数据,这些组件可能各自具有不同的 MIME 类型。例如,multipart/form-data(用于使用 FormData API 生成的数据)和 multipart/byteranges(定义于 RFC 7233, section 5.4.1,当获取到的数据仅为部分内容时——如使用 Range 标头传输的内容——与返回的 HTTP 响应 206 “Partial Content”组合使用)。(查看 IANA 上 multipart 类型的注册表

常见的MIME类型

文本类型

MIME 类型为 text 的文件包含文本数据。子类型指定数据所代表的具体文本文件格式。

  • text/plain:文本文件的默认值。
  • text/css:在网页中要被解析为 CSS 的 CSS 文件必须指定 MIME 为 text/css
  • text/html:与css同理,所有的 HTML 内容都应该使用这种类型。
  • text/javascript:JavaScript 内容应始终使用 MIME 类型 text/javascript 提供,使用除 text/javascript 以外的任何 MIME 类型都可能导致脚本无法加载或运行。

图片类型

MIME 类型为 image 的文件包含图像数据。子类型指定数据所代表的具体图像文件格式。

以下是常用的图像类型,可在网页中安全使用:

  • image/apng:动画便携式网络图形(APNG)
  • image/avif:AV1 图像文件格式(AVIF)
  • image/gif:图形交换格式(GIF)
  • image/jpeg:联合图像专家小组图片(JPEG)
  • image/png:便携式网络图形(PNG)
  • image/svg+xml:可缩放矢量图形(SVG)
  • image/webp:Web 图像格式(WEBP)

音频类型

MIME 类型为 audio 的文件包含音频数据。子类型指定数据所代表的具体音频文件格式。

  • audio/wav:音频格式为WAV(Waveform Audio File Format,波形音频文件格式)。

  • audio/flac:音频格式为FLAC(Free Lossless Audio Codec,免费无损音频编解码器)。

  • audio/ogg:音频格式为OGG(Ogg Vorbis)。Ogg Vorbis是一种有损压缩格式,以优秀的压缩效率和音质著称(压缩率约为45%-85%)。

  • audio/aac:音频格式为AAC(Advanced Audio Coding,高级音频编码)。AAC 是一种有损压缩技术,以更高的音频质量和更低的比特率相比MP3著称(压缩率约为10%-15%)。

  • audio/mpeg:音频格式为MPEG(Moving Picture Experts Group,视频图像专家组),即MP3。

  • audio/wma:音频格式为WMA(Windows Media Audio,Windows媒体音频)。

  • audio/webm:音频格式为WebM(WebM Audio)。

  • 视频类型

MIME 类型为 video 的文件包含视频数据,子类型指定数据所代表的具体视频文件格式。

  • video/mp4:视频格式为MP4(MPEG-4 Part 14)。
  • video/webm:视频格式为WebM,采用VP8或VP9视频编码和Vorbis或Opus音频编码。
  • video/ogg:视频格式为Ogg。使用Theora视频编码。
  • video/x-msvideo:视频格式为AVI(Audio Video Interleave)。
  • video/quicktime:视频格式为QuickTime,由苹果公司开发。
  • video/mpeg:视频格式为MPEG(Moving Picture Experts Group)。

设置正确的 MIME 类型的重要性

很多 web 服务器使用默认的 application/octet-stream 来发送未知类型。出于一些安全原因,对于这些资源浏览器不允许设置一些自定义默认操作,强制用户必须存储到本地以使用。

常见的导致服务器配置错误的文件类型如下所示:

  • RAR 压缩文件。在这种情况,理想状态是,设置真实的编码文件类型;但这通常不可能,因为 .RAR 文件可能包含多种不同类型的资源。这种情况,将所发送文件的 MIME 类型配置为 application/x-rar-compressed
  • 音频或视频文件。只有正确设置了 MIME 类型的文件才能被videoaudio元素识别和播放。请确保指定了正确的音频和视频的媒体类型。
  • 专有文件类型。避免使用 application/octet-stream,对于这种一般的 MIME 类型浏览器不允许定义默认行为(比如“在 Word 中打开”)。像 application/vnd.mspowerpoint 这样的类型可以让用户选择自动在幻灯片软件中打开这样的文件。

MIME 嗅探

在缺失 MIME 类型或客户端认为文件设置了错误的 MIME 类型时,浏览器可能会通过查看资源来进行 MIME 嗅探

浏览器不允许定义默认行为(比如“在 Word 中打开”)。像 application/vnd.mspowerpoint 这样的类型可以让用户选择自动在幻灯片软件中打开这样的文件。

MIME 嗅探

在缺失 MIME 类型或客户端认为文件设置了错误的 MIME 类型时,浏览器可能会通过查看资源来进行 MIME 嗅探

每一个浏览器在不同的情况下会执行不同的操作。(例如,Safari 会在发送的 MIME 类型不合适时查看文件的扩展名。)由于某些 MIME 类型可能代表可执行内容,会存在一些安全问题。服务器可以通过发送 X-Content-Type-Options 标头来阻止 MIME 嗅探。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值