关于MIME的介绍
MIME (Multipurpose Internet Mail Extensions,多目的Internet邮件扩展)
用户可以通过使用MIME以设置服务器传送多媒体如声音和动画信息,这一切可能通过CGI脚本来进行。在下面的文章中,你可以了解到一此关于MIME和关于在网络上使用MIME的知识。
MIME是一种技术规范,它原来是用于电子邮件的,现在也可以用于浏览器上,传送可以供浏览器识别的信息,关于MIME的知识并是十分难懂的,有一些基本的计算机概念就可以理解了,但如果要进一步使用,就必须注意内容。实际上,我们在上网的时候就已经接触到了MIME,只是浏览器和服务器在底层实现了。
MIME有时候被错误地理解为多媒体Internet邮件扩展(Multimedia Internet Mail Extensions),这是一个错误,但是MIME在网上经常用于多媒体应用程序,所以人们以为这是它是多媒体邮件扩展,而实际上它应该被称为多用途Internet邮件扩展(Multipurpose Internet Mail Extensions),这一点一定要注意,因为有时候内容里根本没有非文本成份。
MIME对于邮件系统的扩展是巨大的,因为在MIME出现以前,信件内容如果要包括声音和动画,就必须把它变为ASCII码或把二进制的信息变成可以传送的编码标准,而接收方必须经过解码才可以获得声音和图画信息。MIME提供了一种可以在邮件中附加多种不同编码文件的方法。这与原来的邮件是大大不同的。而现在MIME已经成为了HTTP协议标准的一个部分。
MIME是服务器通知客户机传送文件是什么类型的主要方法,客户机浏览器也通过MIME告诉服务器它的参数。在网上,如果接收到的文件没有MIME头,就默认它为HTML格式。但这样也不好,因为当MIME的包头是text/plain时,浏览器将直接显示而不关心它的什么字体,颜色之类的参数,这样显示出来的内容可不是很好看呀。
MIME头是什么样子要看它是用在电子邮件中还是用在浏览器上,两者内容可能有所不同。对于邮件头来说,版本号,内容类型声
明,编码方式,内容描述是必不可少的。这是用于邮件头中的格式,在下面,我们将重点说到在HTTP中传送MIME头,这时MIME头要简单一些。
下例是一个邮件的标准MIME头:
Mime-Version: 1.0 //版本号:1.0
Content-Type: multipart/mixed; boundary="IMA.Boundary.750407228" //内容类型是多种的
–IMA.Boundary.750407228
Content-Type: text/plain; charset=US-ASCII //内容类型:文本,字符是ASCII的
Content-Transfer-Encoding: 7bit //编码方式:7位
Content-Description: cc:Mail note part
在用于浏览器时,用户不需要知道那么多的信息,所以MIME头就比较简单了。在访问一个网页时,浏览器和服务器之间产生一个会话,作为请求内容的一部分,浏览器发送它能够理解的MIME类型的描述,这就告诉服务器,浏览器除了网页外还可以支持什么,服务器对这个信息一般不作为什么修改。
服务器通过发向客户机的MIME头通知客户浏览器内容是什么,我们看看下面这个头:
Content-type: text/html
在实现的时候,一定要注意MIME头后要跟一个空行,不然这个头会被浏览器忽略,这个头会被当作文本显示出来。当服务器传送GIF图象时,头会如下:
Content-type: image/gif
Content-transfer-encoding: BINARY
通常的MIME内容类型并不起什么作用,浏览器可以自己识别内容的类型,但是如果您使用一些另外的类型,这个问题可就大了,如果你使用了text/postscript,那浏览器会显示下载窗口,或就把这个东西显示出来,那可就不好办了。下面我们介绍一下标准MIME类型。
Text. 文本,它用于描述不同类型的文本,包括通常的文本,PostScript和HTML,虽然HTML不是一个可能的子类型。
Multipart. 多类型,指出此信息包括多种信息,不止一种类型。
Message. 用于标记不同类型的消息。
Application. 应用类型。
Image. 图象,用于标明图形文件。
Audio. 声音,用于标明声音文件。
Video. 影象,用于标明动画文件。
每个MIME类型有不同的子类型,实际上,您不可能单独使用类型而不使用子类型,只有一个例外,这就是"telnet"类型。IANA提供45种类型/子类型对支持。当然,标准是开放的,允许用户自定义自己的类型,用户自定义类型要以“X-”开始以示区别。在添加新的类型时,一定要注意,尽量使用已有的类型达到自己的目的。如果非要添加新的类型,一定要保证服务器一方支持这种类型,也要保证客户端也能够通过一些应用程序(如插件)来识别新类型。如果您的网站的访问者很广,不要轻易使用新类型,要么使用已有的类型,或者向IANA提出注册请求。
在IIS中,你可以指定某种扩展名文件由服务器处理的方式,比如 你可以指定 .mp3 的文件使用 数字音频的方式处理。
比如我们通常访问微软网站,很多网页的扩展名是 .mspx ,但可能你没见过这种扩展名的网页文件,微软的网站是采用 ASP.NET 技术的,理应当扩展名是 .aspx ,但为什么在微软的网站中 ASP.NET 的网页的扩展名是 .mspx 而不是 .aspx? 怎么实现的呢?其实这微软这么做并没有什么特别的意义,只是看起来更加个性一点,实现方法就是 将 .mspx 文件 注册 MIME 类型为 ASP.NET 页面,就是说,当你访问这种文件时,微软的服务器会按照 ASP.NET 的方式处理。
通过上面的介绍,你应该知道了,MIME类型 就是 告诉服务器,某种扩展名的文件的处理方式。
通常,如果一个文件你没有注册其 MIME 类型,直接通过URL访问的话,这个文件就会被下载下来。假设你删除了 IIS 中,htm/html 文件的 MIME 类型,当你访问这个文件的时候,你将看不到这个网页,而是这个网页被你下载下来了。在 Windows Server 2003/2008 中,微软为了安全起见,默认情况下,没有注册 MIME 类型的文件是不可以被下载的,当你访问没有注册的文件类型时,将会返回出错页面。
我先通过图片来讲解 IIS 中添加与修改 MIME 类型的方法(由于我现在使用的是 Microsoft Windows XP Professional,所以我使用XP PRO自带的 IIS 5.1简化版)。
打开IIS的控制台,打开需要操作的网站的属性对话框。
选择 HTTP 头选项卡,打开 MIME 映射中的 文件类型 按钮。
在这里,我们可以添加我们需要的 MIME 类型,比如我们需要 IIS 支持 rmvb 文件在线播放,那么我们需要添加 关联文件名 .rmvb ,内容类型(MIME) 为 application/vnd.rn-realmedia 。
如果我们需要的解释器不在IIS中,比如 PHP 那么我们需要按照以下方法添加。
选择“配置”按钮
在这里我们可以看到很多已经注册的文件扩展名,以及解释这些文件应用的 dll文件。
在这里,假设我们要添加一个文件 .he ,C是系统分区,让IIS当作 asp 程序执行它,我们就需要添加文件类型 .he ,可执行文件为 “C:WINDOWSsystem32inetsrvasp.dll”(WINNT及2000应该是“C:WINNTsystem32inetsrvasp.dll”)。
所以在通常情况下,我们在IIS中添加某种文件的执行程序需要知道解释这种文件的 dll 文件的位置,比如要想在 IIS 中运行 PHP 程序,就需要安装 PHP 的脚本解释器,然后再指定 .php 文件到那个 dll 文件上。
假设使用的是某运营商的虚拟主机服务如何自定义 MIME 类型呢?不少虚拟主机服务商是支持用户自定义 MIME 类型的,比如我的服务商就支持这项功能。
在这里操作就不像直接在 IIS 中操作那么复杂了,当然也有一定的局限性。
因为我们只能够指定服务器支持的文件类型,但是通常很多服务商都支持常见的文件类型。
常见的 MIME 类型:
超文本标记语言文本 .html,.html text/html
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
GIF图形 .gif image/gif
JPEG图形 .jpeg,.jpg image/jpeg
au声音文件 .au audio/basic
MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
WAP网站的网页:
.wbmp image/vnd.wap.wbmp
.wml text/vnd.wap.wml
.wmlc application/vnd.wap.wmlc
.wmls text/vnd.wap.wmlscript
.wmlsc application/vnd.wap.wmlscriptc
附 微软IIS默认 MIME 表:
扩展名 | 类型/子类型 | IIS 4.0 | IIS 5.0 |
* | application/octet-stream | 是 | 是 |
323 | text/h323 | 否 | 是 |
acx | application/internet-property-stream | 否 | 是 |
ai | application/postscript | 是 | 是 |
aif | audio/x-aiff | 是 | 是 |
aifc | audio/x-aiff | 是 | 是 |
aiff | audio/x-aiff | 是 | 是 |
asf | video/x-ms-asf | 否 | 是 |
asr | video/x-ms-asf | 否 | 是 |
asx | video/x-ms-asf | 否 | 是 |
au | audio/basic | 是 | 是 |
avi | video/x-msvideo | 是 | 是 |
axs | application/olescript | 否 | 是 |
bas | text/plain | 是 | 是 |
bcpio | application/x-bcpio | 是 | 是 |
bin | application/octet-stream | 是 | 是 |
bmp | image/bmp | 是 | 是 |
c | text/plain | 是 | 是 |
cat | application/vnd.ms-pkiseccat | 否 | 是 |
cdf | application/x-cdf | 否 | 是 |
cer | application/x-x509-ca-cert | 否 | 是 |
class | application/octet-stream | 是 | 是 |
clp | application/x-msclip | 是 | 是 |
cmx | image/x-cmx | 是 | 是 |
cod | image/cis-cod | 是 | 是 |
cpio | application/x-cpio | 是 | 是 |
crd | application/x-mscardfile | 是 | 是 |
crl | application/pkix-crl | 否 | 是 |
crt | application/x-x509-ca-cert | 否 | 是 |
csh | application/x-csh | 是 | 是 |
css | text/css | 否 | 是 |
dcr | application/x-director | 是 | 是 |
der | application/x-x509-ca-cert | 否 | 是 |
dir | application/x-director | 是 | 是 |
dll | application/x-msdownload | 否 | 是 |
dms | application/octet-stream | 是 | 是 |
doc | application/msword | 是 | 是 |
dot | application/msword | 是 | 是 |
dvi | application/x-dvi | 是 | 是 |
dxr | application/x-director | 是 | 是 |
eps | application/postscript | 是 | 是 |
etx | text/x-setext | 是 | 是 |
evy | application/envoy | 是 | 是 |
exe | application/octet-stream | 是 | 是 |
fif | application/fractals | 否 | 是 |
flr | x-world/x-vrml | 是 | 是 |
gif | image/gif | 是 | 是 |
gtar | application/x-gtar | 是 | 是 |
gz | application/x-gzip | 否 | 是 |
h | text/plain | 是 | 是 |
hdf | application/x-hdf | 是 | 是 |
hlp | application/winhlp | 是 | 是 |
hqx | application/mac-binhex40 | 是 | 是 |
hta | application/hta | 否 | 是 |
htc | text/x-component | 否 | 是 |
htm | text/html | 是 | 是 |
html | text/html | 是 | 是 |
htt | text/webviewhtml | 否 | 是 |
ico | image/x-icon | 否 | 是 |
ief | image/ief | 是 | 是 |
iii | application/x-iphone | 否 | 是 |
ins | application/x-internet-signup | 否 | 是 |
isp | application/x-internet-signup | 否 | 是 |
jfif | image/pipeg | 否 | 是 |
jpe | image/jpeg | 是 | 是 |
jpeg | image/jpeg | 是 | 是 |
jpg | image/jpeg | 是 | 是 |
js | application/x-javascript | 是 | 是 |
latex | application/x-latex | 是 | 是 |
lha | application/octet-stream | 是 | 是 |
lsf | video/x-la-asf | 否 | 是 |
lsx | video/x-la-asf | 否 | 是 |
lzh | application/octet-stream | 是 | 是 |
m13 | application/x-msmediaview | 是 | 是 |
m14 | application/x-msmediaview | 是 | 是 |
m3u | audio/x-mpegurl | 否 | 是 |
man | application/x-troff-man | 是 | 是 |
mdb | application/x-msaccess | 是 | 是 |
me | application/x-troff-me | 是 | 是 |
mht | message/rfc822 | 否 | 是 |
mhtml | message/rfc822 | 否 | 是 |
mid | audio/mid | 否 | 是 |
mny | application/x-msmoney | 是 | 是 |
mov | video/quicktime | 是 | 是 |
movie | video/x-sgi-movie | 是 | 是 |
mp2 | video/mpeg | 是 | 是 |
mp3 | audio/mpeg | 否 | 是 |
mpa | video/mpeg | 是 | 是 |
mpe | video/mpeg | 是 | 是 |
mpeg | video/mpeg | 是 | 是 |
mpg | video/mpeg | 是 | 是 |
mpp | application/vnd.ms-project | 是 | 是 |
mpv2 | video/mpeg | 是 | 是 |
ms | application/x-troff-ms | 是 | 是 |
mvb | application/x-msmediaview | 是 | 是 |
nws | message/rfc822 | 否 | 是 |
oda | application/oda | 是 | 是 |
p10 | application/pkcs10 | 否 | 是 |
p12 | application/x-pkcs12 | 否 | 是 |
p7b | application/x-pkcs7-certificates | 否 | 是 |
p7c | application/x-pkcs7-mime | 否 | 是 |
p7m | application/x-pkcs7-mime | 否 | 是 |
p7r | application/x-pkcs7-certreqresp | 否 | 是 |
p7s | application/x-pkcs7-signature | 否 | 是 |
pbm | image/x-portable-bitmap | 是 | 是 |
application/pdf | 是 | 是 | |
pfx | application/x-pkcs12 | 否 | 是 |
pgm | image/x-portable-graymap | 是 | 是 |
pko | application/ynd.ms-pkipko | 否 | 是 |
pma | application/x-perfmon | 是 | 是 |
pmc | application/x-perfmon | 是 | 是 |
pml | application/x-perfmon | 是 | 是 |
pmr | application/x-perfmon | 是 | 是 |
pmw | application/x-perfmon | 是 | 是 |
pnm | image/x-portable-anymap | 是 | 是 |
pot, | application/vnd.ms-powerpoint | 是 | 是 |
ppm | image/x-portable-pixmap | 是 | 是 |
pps | application/vnd.ms-powerpoint | 是 | 是 |
ppt | application/vnd.ms-powerpoint | 是 | 是 |
prf | application/pics-rules | 否 | 是 |
ps | application/postscript | 是 | 是 |
pub | application/x-mspublisher | 是 | 是 |
qt | video/quicktime | 是 | 是 |
ra | audio/x-pn-realaudio | 是 | 是 |
ram | audio/x-pn-realaudio | 是 | 是 |
ras | image/x-cmu-raster | 是 | 是 |
rgb | image/x-rgb | 是 | 是 |
rmi | audio/mid | 否 | 是 |
roff | application/x-troff | 是 | 是 |
rtf | application/rtf | 是 | 是 |
rtx | text/richtext | 是 | 是 |
scd | application/x-msschedule | 是 | 是 |
sct | text/scriptlet | 否 | 是 |
setpay | application/set-payment-initiation | 否 | 是 |
setreg | application/set-registration-initiation | 否 | 是 |
sh | application/x-sh | 是 | 是 |
shar | application/x-shar | 是 | 是 |
sit | application/x-stuffit | 否 | 是 |
snd | audio/basic | 是 | 是 |
spc | application/x-pkcs7-certificates | 否 | 是 |
spl | application/futuresplash | 否 | 是 |
src | application/x-wais-source | 是 | 是 |
sst | application/vnd.ms-pkicertstore | 否 | 是 |
stl | application/vnd.ms-pkistl | 否 | 是 |
stm | text/html | 是 | 是 |
sv4cpio | application/x-sv4cpio | 是 | 是 |
sv4crc | application/x-sv4crc | 是 | 是 |
t | application/x-troff | 是 | 是 |
tar | application/x-tar | 是 | 是 |
tcl | application/x-tcl | 是 | 是 |
tex | application/x-tex | 是 | 是 |
texi | application/x-texinfo | 是 | 是 |
texinfo | application/x-texinfo | 是 | 是 |
tgz | application/x-compressed | 否 | 是 |
tif | image/tiff | 是 | 是 |
tiff | image/tiff | 是 | 是 |
tr | application/x-troff | 是 | 是 |
trm | application/x-msterminal | 是 | 是 |
tsv | text/tab-separated-values | 是 | 是 |
txt | text/plain | 是 | 是 |
uls | text/iuls | 否 | 是 |
ustar | application/x-ustar | 是 | 是 |
vcf | text/x-vcard | 否 | 是 |
vrml | x-world/x-vrml | 是 | 是 |
wav | audio/x-wav | 是 | 是 |
wcm | application/vnd.ms-works | 是 | 是 |
wdb | application/vnd.ms-works | 是 | 是 |
wks | application/vnd.ms-works | 是 | 是 |
wmf | application/x-msmetafile | 是 | 是 |
wps | application/vnd.ms-works | 是 | 是 |
wri | application/x-mswrite | 是 | 是 |
wrl | x-world/x-vrml | 是 | 是 |
wrz | x-world/x-vrml | 是 | 是 |
xaf | x-world/x-vrml | 是 | 是 |
xbm | image/x-xbitmap | 是 | 是 |
xla | application/vnd.ms-excel | 是 | 是 |
xlc | application/vnd.ms-excel | 是 | 是 |
xlm | application/vnd.ms-excel | 是 | 是 |
xls | application/vnd.ms-excel | 是 | 是 |
xlt | application/vnd.ms-excel | 是 | 是 |
xlw | application/vnd.ms-excel | 是 | 是 |
xof | x-world/x-vrml | 是 | 是 |
xpm | image/x-xpixmap | 是 | 是 |
xwd | image/x-xwindowdump | 是 | 是 |
z | application/x-compress | 否 | 是 |
zip | application/zip | 是 | 是 |
博主你好,我网站遇到图片另存到电脑都变成bmp格式的问题,请问是什么原因,我用多台电脑试过了,都一样,而且也可以排除是网站程序的问题,问题应该出在服务器上,请问要怎么设置?点右键图片属性里类型和大小都不可用
嗯,我今天做了个在线视频播放,本地可以打开.flv的文件,并测试可以播放。但是我把项目上传到服务器上,并在mime里面加了.flv flv-application/octet-stream 的类型。直接在iis打开首页并浏览到播放视频的那个页面,发现页面一片空白,但是右击时又有出现一些对播放器相关属性的设置。在测试时还发现我页面的那个播放器的一个属性skin,如果sikn设置成 skin=/VideoFram/skin/stijl.swf 或skin=../VideoFram/skin/stijl.swf时本地是正常。如果 skin=VideoFram/skin/stijl.swf本地播放页面也是一片空白跟在iis上的一样。我那个播放器是直接放在根目录下,播放页与VideoFram文件夹是同级关系,iis上所有文件的位置关系跟在本地是一样的。虽然隐约感觉跟这个skin读取那个文件的路径有关,但是不管我怎么改那个skin在iis上好像都不起作用,本地skin路径没问题在iis上为啥就不行了?
[reply=任侠,2012-07-07 03:49 PM]这应只是路径访问的问题,可能有的地方的差异被忽略掉了,仔细测试[/reply]
这样的话,我上面的那个.kk文件如果要让它能够在网页上在线播放,那要怎样设置?
[reply=任侠,2012-06-29 05:31 PM]如果是需要组件解析运行的文件类型,比如asp、asp.net、php等,这些需要进行组件映射,因为它们需要服务器对其解析后再传递给浏览器;对于其他普通类型文件则只做mime解析即可,浏览器通过mime类型来识别如何处理该文件
直接打开的视频的在线播放是需要浏览器支持才行的[/reply]
我按照你说的试验了一下,我把一个.flv的视频文件改成.kk为后缀的文件,如果在程序映射里面 添加一个.kk 处理程序为 C:WINDOWSMicrosoft.NETFrameworkv2.0.50727aspnet_isapi.dll,同时也在 mime 里面加一个 .kk flv-application/octet-stream的类型时,访问这个页面浏览去会出现”无法显示该网页“,如果去掉应用程序映射里面的,就会出现一个下载该视频的文本框。为啥他们同时设置时候,mime就不起作用了呢?难道他们之间没有那种相互辅助的作用?
[reply=任侠,2012-06-29 11:18 AM]我仔细看了一下
MIME类型是告诉服务器某种扩展名的文件的处理方式
即MIME是简单的告诉服务器该文件的类型,而应用程序映射则告诉服务器以何种组件对其处理
这样的话,简单的设置MIME,服务器会解析为指定的类型然后传递给浏览器;而当你设置应用程序映射后,就强制使用某组件对其解析,当该组件无法解析文件,即会出错,可以解析,则解析后再传递给浏览器
aspnet_isapi.dll组件是解析asp,asp.net的组件,应只能去尝试解析为该类文件[/reply]
哦,有点明白了,不过我同时对这两个进行配置的话,如将一个.txt的文档后缀改成 .k的。然后在程序映射里面 添加一个.k 处理程序为 C:WINDOWSMicrosoft.NETFrameworkv2.0.50727aspnet_isapi.dll,同时也在 mime 里面加一个 .k video/x-ms-wvx 的类型。这时后浏览器怎么不是用视频打开的,而是直接用text/html 这种格式打开的,如果我去掉 程序映射里面的那个.k 扩展名后,用浏览器在浏览这个文件,此时就是用视频的格式打开的。为啥会这样?
[reply=任侠,2012-06-29 09:55 AM]虽然你让服务器告诉浏览器这是一个视频类型文件,但是你又让服务器使用aspnet_isapi.dll来对其进行解析,而aspnet_isapi.dll发现可以对其解析为文本文档
你可以尝试一下使用一个视频文件,修改后缀为.k,然后再用浏览器查看,对比结果如何[/reply]
你好,你可能搞错我问题的意思了,我问的不是那个虚拟窗口上的那个mime,而是iis管理面板上的那个http头里面的那个mime的设置,跟iis面板->主目录->配置->里面的那个“应用程序映射”的设置是什么关系?他们都有一个为扩展名提供服务的,所以我搞不清楚他们之间到底有没有什么联系。
[reply=任侠,2012-06-28 04:42 PM]mime设置用于使浏览器识别浏览的文件的类型,而设置应用程序映射用于使服务器以何种方式解析或识别该文件[/reply]
你好,谢谢你的回答。但是我还是不太理解,能说得更通俗一点吗,”应用程序映射“的配置,跟那个mime的设置有什么联系没?如果将一个.w的扩展同时在在两个地方进行添加,会不会有啥冲突。
[reply=任侠,2012-06-28 01:15 PM]我觉得你可能没有分辨清楚虚拟主机空间的概念
IDC的虚拟空间一般只提供网站空间管理面板来管理空间,从这里的管理面板设置mimie,与从服务器的iis上直接操作设置,结果是一样的[/reply]
iis里面的那个”应用程序映射“的配置,跟那个mime的设置有什么关系吗?两者有什么联系没?可以具体举例说名一下?
[reply=任侠,2012-06-27 11:23 AM]假设我们要添加一个文件 .he ,C是系统分区,让IIS当作 asp 程序执行它,我们就需要添加文件类型 .he ,可执行文件为 “C:WINDOWSsystem32inetsrvasp.dll”
这里的意思你应该理解吧
前者是在服务器上直接操作的;后者是因为使用虚拟空间,不能直接操作服务器i,但空间服务商可能在控制面板中提供该功能的设置,其操作后的结果与前者基本等同
不知道我这样说你是否明白[/reply]