用ie9的开发人员工具调试一个丢失了样式的网页时提示错误"CSS 因 Mime 类型不匹配而被忽略",究其原因是因为服务器端的页面输出是我用。net程序输出的,对于css没有进行特殊的mine头信息处理,而ie9对于css文件的mine头信息要求相对严格。
什么是Mime类型:
MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
为什么ie9不现实错误MIME类型的css文件样式:
在IE9的新安全机制中,要求web服务器返回的http 头信息中content-type必需写明css文件的MIME-type为'text/css',否则IE9不会将它作为css文件来处理。如果想要ie9也能正确的显示css文件定义的样式,需要修改服务器端返回给客户端的css文件的http header头信息中对应的mime类型。
如何修改返回的css MIME信息:
修正css 文件的返回mime信息有不同方法,一是修改服务器配置或者服务器程序,对于css文件输出正确的mine头信息。这个要对iis设置进行操作,对于自己的服务器来说可行,但对于使用虚拟主机的站长来说就不是和容易做到了,这里就不细说了。
另一种另类方法是,通过配置web.xml文件,要求服务器输出正确的css mine信息。 [来自悟空的博客 www.7es.cn]
web.xml加入内容为
- <!--悟空博客代码 http://www.7es.cn -->
- <mime-mapping>
- <extension>css</extension>
- <mime-type>text/css</mime-type>
- </mime-mapping>
另外对于我遇到的这种情况,所有文件都是伪静态输出的,包括css文件也是通过一个asp.net页面伪静态输出的,就可以通过修改asp.net程序代码来实现了,在返回数据时可以通过对Response对象的Headers数组进行操作,指定正确的css文件mime输出,c#代码如下:
- ////css mine特殊处理 悟空的代码 www.7es.cn
- if (fileext == ".css") //首先判断输出的是css文件
- {
- Response.AddHeader("Content-Type", "text/css;charset=utf-8"); //在response返回信息中加入css mime头
- }
通过以上方法,即可解决ie9提示错误信息“CSS 因 Mime 类型不匹配而被忽略”不正确渲染页面样式的问题了。