关于IIS使用自定义MIME类型详解

关于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简化版)。

HeLiFan-CN-IISMIME-1

打开IIS的控制台,打开需要操作的网站的属性对话框。

 HeLiFan-CN-IISMIME-6

选择 HTTP 头选项卡,打开 MIME 映射中的 文件类型 按钮。

HeLiFan-CN-IISMIME-7

在这里,我们可以添加我们需要的 MIME 类型,比如我们需要 IIS 支持 rmvb 文件在线播放,那么我们需要添加 关联文件名 .rmvb ,内容类型(MIME) 为 application/vnd.rn-realmedia 。

如果我们需要的解释器不在IIS中,比如 PHP 那么我们需要按照以下方法添加。

HeLiFan-CN-IISMIME-2

选择“配置”按钮

HeLiFan-CN-IISMIME-3

在这里我们可以看到很多已经注册的文件扩展名,以及解释这些文件应用的 dll文件。

HeLiFan-CN-IISMIME-4

在这里,假设我们要添加一个文件 .he ,C是系统分区,让IIS当作 asp 程序执行它,我们就需要添加文件类型 .he ,可执行文件为 “C:WINDOWSsystem32inetsrvasp.dll”(WINNT及2000应该是“C:WINNTsystem32inetsrvasp.dll”)。

所以在通常情况下,我们在IIS中添加某种文件的执行程序需要知道解释这种文件的 dll 文件的位置,比如要想在 IIS 中运行 PHP 程序,就需要安装 PHP 的脚本解释器,然后再指定 .php 文件到那个 dll 文件上。

假设使用的是某运营商的虚拟主机服务如何自定义 MIME 类型呢?不少虚拟主机服务商是支持用户自定义 MIME 类型的,比如我的服务商就支持这项功能。

HeLiFan-CN-IISMIME-5

在这里操作就不像直接在 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
pdf 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

 

点赞 (0)
  1. wayqq说道:

    博主你好,我网站遇到图片另存到电脑都变成bmp格式的问题,请问是什么原因,我用多台电脑试过了,都一样,而且也可以排除是网站程序的问题,问题应该出在服务器上,请问要怎么设置?点右键图片属性里类型和大小都不可用

  2. 笨笨说道:

    嗯,我今天做了个在线视频播放,本地可以打开.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]

  3. 笨笨说道:

    这样的话,我上面的那个.kk文件如果要让它能够在网页上在线播放,那要怎样设置?
    [reply=任侠,2012-06-29 05:31 PM]如果是需要组件解析运行的文件类型,比如asp、asp.net、php等,这些需要进行组件映射,因为它们需要服务器对其解析后再传递给浏览器;对于其他普通类型文件则只做mime解析即可,浏览器通过mime类型来识别如何处理该文件
    直接打开的视频的在线播放是需要浏览器支持才行的[/reply]

  4. 笨笨说道:

    我按照你说的试验了一下,我把一个.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]

  5. 笨笨说道:

    哦,有点明白了,不过我同时对这两个进行配置的话,如将一个.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]

  6. 笨笨说道:

    你好,你可能搞错我问题的意思了,我问的不是那个虚拟窗口上的那个mime,而是iis管理面板上的那个http头里面的那个mime的设置,跟iis面板->主目录->配置->里面的那个“应用程序映射”的设置是什么关系?他们都有一个为扩展名提供服务的,所以我搞不清楚他们之间到底有没有什么联系。
    [reply=任侠,2012-06-28 04:42 PM]mime设置用于使浏览器识别浏览的文件的类型,而设置应用程序映射用于使服务器以何种方式解析或识别该文件[/reply]

  7. 笨笨说道:

    你好,谢谢你的回答。但是我还是不太理解,能说得更通俗一点吗,”应用程序映射“的配置,跟那个mime的设置有什么联系没?如果将一个.w的扩展同时在在两个地方进行添加,会不会有啥冲突。
    [reply=任侠,2012-06-28 01:15 PM]我觉得你可能没有分辨清楚虚拟主机空间的概念
    IDC的虚拟空间一般只提供网站空间管理面板来管理空间,从这里的管理面板设置mimie,与从服务器的iis上直接操作设置,结果是一样的[/reply]

  8. 笨笨说道:

    iis里面的那个”应用程序映射“的配置,跟那个mime的设置有什么关系吗?两者有什么联系没?可以具体举例说名一下?
    [reply=任侠,2012-06-27 11:23 AM]假设我们要添加一个文件 .he ,C是系统分区,让IIS当作 asp 程序执行它,我们就需要添加文件类型 .he ,可执行文件为 “C:WINDOWSsystem32inetsrvasp.dll”
    这里的意思你应该理解吧
    前者是在服务器上直接操作的;后者是因为使用虚拟空间,不能直接操作服务器i,但空间服务商可能在控制面板中提供该功能的设置,其操作后的结果与前者基本等同
    不知道我这样说你是否明白[/reply]

发表评论

电子邮件地址不会被公开。 必填项已用*标注