代码改变世界

MIME乱谈

2012-02-27 18:21  iBlog  阅读(1243)  评论(0编辑  收藏  举报

         他妈的!忘记保存了,live writer直接崩溃,半天写的文章没了....

         言归正传,今天在使用google maps开发一个应用,使用chrome调试时,突然跳出一个警告:Resource interpreted as Other but transferred with MIME type undefined. 意思是:被解释为Other的资源,在被以未定义的MIME类型传输。这是google maps api引入导致某个MIME类型错误,不深究了。

         说说mime(Multipurpose Internet Mail Extensions 多功能Internet 邮件扩充服务)吧,别问为什么,我心情不好!看看百科是如何定义的:

MIME类型就是设定某种扩展名文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义文件名,以及一些媒体文件打开方式。

说白了就是,服务器在发送内容到客户端(比如浏览器),应在传送内容的时候告诉客户端,这个内容是什么类型的,以便客户端能够知道如何处理这个内容,否则有些麻烦,不能让客户端乱猜啊!

下面我们做个小小的测试:从apache服务器上加载jquery-1.7.1.js,并查看服务器告诉浏览器这个文件的MIME(Content-Type),然后修改apache配置,给js脚本一个错误的MIME。

20120227161819

修改apache的httpd.conf,如下:

(配置说明可参看http://httpd.apache.org/docs/2.2/mod/mod_mime.html#addtype

   1: AddType application/x-compress .Z
   2: AddType application/x-gzip .gz .tgz
   3: AddType application/x-httpd-php .php
   4: AddType application/x-httpd-php .php3
   5: #新增扩展名为js的文件MIME为image/gif
   6: AddType image/gif .js

重启apache,再次查看jquery-1.7.1.js的响应头信息

20120227165123

总结:MIME类型的错误并不一定会造成直接的影响或错误,但是我们还是要正确设置Content-Type,因为您无法保证每种浏览器都能原谅这样的情况。(这哥们的经历供参考:《MIME Types惹的祸》 )

比如:我通过firebug调试这个例子,在打开“响应”选项卡时,没有任何显示,为什么呢,firebug在得知jquery-1.7.1.js的Content-Type是image时,它会默认按照图片对待,自然也就无法显示了。

        MIME不是每个人随便定义,就是你可以定义但是浏览器等客户端也无法识别自定义的MIME,IANA已注册的MIME媒体类型列表罗列了已经注册的MIME。可以通过js Navigator对象的属性mimeType来获得浏览器支持的mime类型。

 

      下班时间到!