文章目录

  • 语法
    • 独立类型
    • Multipart 类型
  • 重要的MIME类型
    • application/octet-stream
    • text/plain
    • text/css
    • text/html
    • 图片类型
    • 音频与视频类型
    • multipart/form-data
  • 设置正确的MIME类型的重要性
  • MIME 嗅探

浏览器通常使用MIME类型(而不是文件扩展名)来确定如何处理文档;因此设置正确的MIME类型附加到headers是非常重要的。

语法

type/subtype

MIME的组成结构非常简单;由类型type与子类型subtype两个字符串中间用’/’分隔而成。不允许空格存在。type表示可以被分多个子类的独立类型。subtype表示细分后的每个类型。

独立类型

text/plain
text/html
image/jpeg
image/png
audio/mpeg
audio/ogg
audio/*
video/mp4
application/*
application/json
application/javascript
application/ecmascript
application/octet-stream
......

更多类型

独立类型表明了对文件的分类,可以是如下之一:

类型 描述 典型类型
text 表名文件是普通文本,理论是人类可读 text/plain,text/html,text/css,text/javascript
image 表明是某种图形。不包括视频,但是动态图(gif)也可以使用image类型 image/gif, image/png, image/jpeg, image/bmp, image/webp, image/x-icon, image/vnd.microsoft.icon
audio 表名是某种音频文件 audio/midi, audio/mpeg, audio/webm, audio/ogg, audio/wav
video 表明是某种视频文件 video/webm, video/ogg
application 表名是某种二进制 application/octet-stream, application/pkcs12, application/vnd.mspowerpoint, application/xhtml+xml, application/xml, application/pdf

一般的,如果没有显示的在request headersAllow上设置类型,浏览器的MIME 嗅探会推测出来对应的类型,如果发现找不到特定的子类型,则给出默认类型,比如对于text文件类型若没有特定的subtype,就使用 text/plain。类似的,二进制文件没有特定或已知的 subtype,即使用 application/octet-stream

除了上面的基本的5中类型外,还有一种类型,即multipart类型。

Multipart 类型

  • multipart/form-data
    可用于联系 HTML Forms 和 POST 方法
  • multipart/byteranges

Multipart 类型表示细分领域的文件类型的种类,经常对应不同的 MIME 类型。这是复合文件的一种表现方式。multipart/form-data 可用于联系 HTML Forms 和 POST 方法,此外 multipart/byteranges使用状态码206 Partial Content来发送整个文件的子集,而HTTP对不能处理的复合文件使用特殊的方式:将信息直接传送给浏览器(这时可能会建立一个“另存为”窗口,但是却不知道如何去显示内联文件。)

重要的MIME类型

application/octet-stream

这是应用程序文件的默认值。意思是 未知的应用程序文件 ,浏览器一般不会自动执行或询问执行。浏览器会像对待 设置了HTTP头Content-Disposition 值为 attachment 的文件一样来对待这类文件。

text/plain

文本文件默认值。即使它意味着未知的文本文件,但浏览器认为是可以直接展示的。

text/plain并不是意味着某种文本数据。如果浏览器想要一个文本文件的明确类型,浏览器并不会考虑他们是否匹配。比如说,如果通过一个表明是下载CSS文件的<link>链接下载了一个 text/plain 文件。如果提供的信息是text/plain,浏览器并不会认出这是有效的CSS文件。CSS类型需要使用text/css

text/css

在网页中要被解析为CSS的任何CSS文件必须指定MIME为text/css。通常,服务器不识别以.css为后缀的文件的MIME类型,而是将其以MIME为text/plain 或 application/octet-stream 来发送给浏览器:在这种情况下,大多数浏览器不识别其为CSS文件,直接忽略掉。特别要注意为CSS文件提供正确的MIME类型。

text/html

所有的HTML内容都应该使用这种类型。XHTML的其他MIME类型(如application/xml+html)现在基本不再使用(HTML5统一了这些格式)。

JavaScript types
据 MIME 嗅探标准,下面是有效的 JavaScript MIME 类型

application/javascript
application/ecmascript
text/javascript   //text已废弃

所有的text JavaScript类型已经被 RFC 4329废弃。

图片类型

只有一小部分图片类型是被广泛支持的,Web安全的,可随时在Web页面中使用的:

MIME 类型 图片类型
image/gif GIF 图片 (无损耗压缩方面被PNG所替代)
image/jpeg JPEG 图片
image/png PNG 图片
image/svg+xml SVG 图片 (矢量图)

表格里面的类型是可以随意用的,所有的浏览器都支持,而其他的类型可能被某个浏览器不支持

此处的类型划分有一定的争议,有人认为此处应该增加 WebP(image/webp),但是每个新增的图片类型都会增加代码的数量,这会带来一些新的安全问题,所以浏览器供应商对于添加类型非常小心。

另外的一些图片种类可以在Web文档中找到。比如很多浏览器支持 icon 类型的图标作为 favicons或者类似的图标,并且浏览器在MIME类型中的 image/x-icon 支持ICO图像。

尽管 image/vnd.microsoft.icon 在ANA注册, 它仍然不被广泛支持,image/x-icon被作为替代品使用。

音频与视频类型

HTML并没有明确定义被用于和元素所支持的文件类型,所以在web上使用的只有相对较小的一组类型。

在web环境最常用的视频文件的格式,是以下这些这些文件类型:

MIME 类型 音频或视频类型
audio/wave
audio/wav
audio/x-wav
audio/x-pn-wav
音频流媒体文件。一般支持PCM音频编码 (WAVE codec “1”) ,其他解码器有限支持(如果有的话)。
audio/webm WebM 音频文件格式。Vorbis 和 Opus 是其最常用的解码器。
video/webm 采用WebM视频文件格式的音视频文件。VP8 和 VP9是其最常用的视频解码器。Vorbis 和 Opus 是其最常用的音频解码器。
audio/ogg 采用OGG多媒体文件格式的音频文件。 Vorbis 是这个多媒体文件格式最常用的音频解码器。
video/ogg 采用OGG多媒体文件格式的音视频文件。常用的视频解码器是 Theora;音频解码器为Vorbis 。
application/ogg 采用OGG多媒体文件格式的音视频文件。常用的视频解码器是 Theora;音频解码器为Vorbis 。
application/json application/json (MIME_type)

multipart/form-data

multipart/form-data 可用于HTML表单从浏览器发送信息给服务器。作为多部分文档格式,它由边界线(一个由'--'开始的字符串)划分出的不同部分组成。每一部分有自己的实体,以及自己的 HTTP 请求头,Content-Disposition和 Content-Type 用于文件上传领域,最常用的 (Content-Length 因为边界线作为分隔符而被忽略)。

模板:

Content-Type: multipart/form-data; boundary=aBoundaryString
(other headers associated with the multipart document as a whole)--aBoundaryString
Content-Disposition: form-data; name="myFile"; filename="img.jpg"
Content-Type: image/jpeg(data)
--aBoundaryString
Content-Disposition: form-data; name="myField"(data)
--aBoundaryString
(more subparts)
--aBoundaryString--

如下所示的表单:

<form action="http://localhost:8000/" method="post" enctype="multipart/form-data"><input type="text" name="myTextField"><input type="checkbox" name="myCheckBox">Check</input><input type="file" name="myFile"><button>Send the file</button>
</form>

会发送这样的请求:

POST / HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Content-Type: multipart/form-data; boundary=---------------------------8721656041911415653955004498
Content-Length: 465-----------------------------8721656041911415653955004498
Content-Disposition: form-data; name="myTextField"Test
-----------------------------8721656041911415653955004498
Content-Disposition: form-data; name="myCheckBox"on
-----------------------------8721656041911415653955004498
Content-Disposition: form-data; name="myFile"; filename="test.txt"
Content-Type: text/plainSimple file.
-----------------------------8721656041911415653955004498--

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

很多web服务器使用默认的 application/octet-stream 来发送未知类型。出于一些安全原因,对于这些资源浏览器不允许设置一些自定义默认操作,导致用户必须存储到本地以使用。常见的导致服务器配置错误的文件类型如下所示:

  • RAR编码文件。在这种情况,理想状态是,设置真实的编码文件类型;但这通常不可能(可能是服务器所未知的类型或者这个文件包含许多其他的不同的文件类型)。这这种情况服务器将发送 application/x-rar-compressed 作为MIME类型,用户不会将其定义为有用的默认操作。

  • 音频或视频文件。只有正确设置了MIME类型的文件才能被 或 识别和播放。 可参照 use the correct type for audio and video。

  • 专有文件类型。是专有文件时需要特别注意。使用 application/octet-stream 作为特殊处理是不被允许的:对于一般的MIME类型浏览器不允许定义默认行为(比如“在Word中打开”)

MIME 嗅探

缺失 MIME 类型或客户端认为文件设置了错误的 MIME 类型时,浏览器可能会通过查看资源来进行MIME嗅探。每一个浏览器在不同的情况下会执行不同的操作。因为这个操作会有一些安全问题,有的 MIME 类型表示可执行内容而有些是不可执行内容。浏览器可以通过请求头 Content-Type 来设置 X-Content-Type-Options 以阻止MIME嗅探。

【web】HTTP MIME类型相关推荐

  1. 移动web网站常用MIME类型

    移动web网站常用MIME类型 Android APP的MIME:文件扩展名:.apk MIME类型:application/vnd.android.package-archiveiPhone APP ...

  2. Java Web开发技术详解~MIME类型

    MIME(Multipurpose Internet Mail Extension)是指多用途网络邮件扩展协议,这里的邮件不单纯值E-Mail,还可以包括通过各种应用层协议在网络上传输的数据. 遵守M ...

  3. php文件上传绕过mime类型,文件上传限制绕过技巧

    严正声明:本文仅限于技术讨论,严禁用于其他用途. 简介 文件上传漏洞是web安全中经常利用到的一种漏洞形式.一些web应用程序中允许上传图片,文本或者其他资源到指定的位置,文件上传漏洞就是利用这些可以 ...

  4. 自定义MIME类型支持FLV的相关设置

    网络空间支持FLV的相关设置其实很简单,就是自定义一个MIME类型 一般虚拟主机管理里面都有这个选项 自定义MIME类型 扩展名: .flv MIME类型: flv-application/octet ...

  5. Mime类型与文件后缀对照表及探测文件MIME的方法

    说明:刚刚写了一篇<IHttpHandler的妙用(2):防盗链!我的资源只有我的用户才能下载>的文章,网址:http://blog.csdn.net/zhoufoxcn/archive/ ...

  6. 服务器修改mime类型,服务器上没有设置mime类型

    服务器上没有设置mime类型 内容精选 换一换 在大型网络应用中,通常会使用多台服务器提供同一个服务.为了平衡每台服务器上的访问压力,通常会选择采用负载均衡来实现,提高服务器响应效率.云解析服务支持解 ...

  7. 在IIS中配置MIME类型组建Wap网站

    1.创建站点文件夹 首先你要在IIS上创建一个新的站点. 2.创建新的MIME类型 首先选择"WAP"站点的"属性",然后选择"HTTP 头" ...

  8. IE9 CSS 因 Mime 类型不匹配而被忽略“问题

    写页面的时候在chrome,fireforks等页面上显示正常,但是换成IE9之后就完全没有样式了.IE真是个奇葩的怪胎.它的报错信息是'CSS 因 Mime 类型不匹配而被忽略',也就是说所有的.c ...

  9. ServletContext_功能_获取MIME类型

    1. 获取MIME类型:     * MIME类型:在互联网通信过程中定义的一种文件数据类型         * 格式: 大类型/小类型   text/html        image/jpeg * ...

最新文章

  1. 新书上市 | 流行SQL引擎Presto,官方实战指南来了
  2. SQL语句导入导出大全
  3. pytorch和Numpy的区别以及相互转换
  4. python【蓝桥杯vip练习题库】ALGO-142 P1103(复数运算)
  5. Spring4新特性——Web开发的增强
  6. 通过webpack配置vue项目页面title
  7. 【转】Ubuntu 修改hosts
  8. gis里创建要素面板怎么打开_周末技术流 | GIS三维热力图分析
  9. 异步fifo_数字IC校招基础知识点复习(五)——跨时钟域涉及part2(异步FIFO)
  10. 关于 Vue.js:那些好的,不怎么样的和糟糕的
  11. 太疯狂了!刚刚,马斯克脑机接口试验成功!这次是活猪下次是人脑!
  12. svm图片多分类python代码_[OpenCV随笔]-OpenCV3.x中SVM多分类使用(代码篇)
  13. 分类模型的评价指标--混淆矩阵,ROC曲线,AUC及sklearn.metrics.roc_curve参数说明
  14. C# 创建HttpServer
  15. matlab频率响应怎么求零极点,离散系统的频率响应分析和零极点分布.doc
  16. 最新仿淘宝详细页头部渐变效果
  17. MathType公式编辑器试用期到了怎么办?
  18. 计算机英语新词的认知语义阐释论文,英语新词的认知语义分析
  19. 如何使域名跳转到个人博客
  20. 【C++】Web服务器项目所用到的函数详解

热门文章

  1. 自己做量化交易软件(19)通达信公式转Python代码的程序
  2. 无代码搭建“网站运营”管理系统
  3. day26.1-宏定义,头文件,malloc
  4. python判断题题库_《Python程序设计》判断题1-240题
  5. ubuntu16.04 不能在本地显示图片的问题
  6. 欧几里得空间 希尔伯特空间
  7. jsp有关在ie中打开pdf文件的问题
  8. 【目标检测】基于yolov6的钢筋检测和计数(附代码和数据集)
  9. 传统推荐方法相关论文和代码
  10. 穷则心怀天下,达则兼济天下