浏览器如何判断一个文档的类型是txt,还是html?还是JPG? 还是XML ? .... 不同的文档类型应该使用不同的方式去显示。
比较标准的判断文档类型依据是:
1) 通过HTTP 请求数据包header的Content-Type值
2)通过文件扩展名
但是这2个依据并不是每次都可靠的。有很多服务器没有被很好配置,于是就没有content-type这项。另外,很多动态的PHP/ASP生成的内容都是没有文件扩展名的,比如
http://123.com/a.php?abc=xyz 这种URL。
于是IE 加入了另外一个依据:
3) 根据文档的数据内容来判断文档类型
不同的文档类型有不同的数据特征,通过这些特征来确定类型。
但是,有些时候Web开发者并不希望这么IE 自动判断,怎么办? IE8里面新增了一个HTTP请求数据包header的属性X-Content-Type-Options。 可以通过使用X-Content-Type-Options:nosniff 选项来关闭IE的文档类型自动判断功能。
HTTP/1.1 200 OK
Content-Length: 108
Date: Thu, 26 Jun 2008 22:06:28 GMT
Content-Type: text/plain;
X-Content-Type-Options: nosniff
Content-Length: 108
Date: Thu, 26 Jun 2008 22:06:28 GMT
Content-Type: text/plain;
X-Content-Type-Options: nosniff
<html>
<body bgcolor="#AA0000">
This page renders as HTML source code (text) in IE8.
</body>
</html>
<body bgcolor="#AA0000">
This page renders as HTML source code (text) in IE8.
</body>
</html>
以上这段代码在IE8下就会显示成纯文本,因为Content-Type: text/plain;定义了该文档是txt文件。
但是在IE7下就会显示成一个HTML文件,因为IE7通过这个文档的数据(HTML代码)判定这是一个HTML文件。
IE8 截图
IE7 截图
本文转自 陈本峰 51CTO博客,原文链接:http://blog.51cto.com/wingeek/273599,如需转载请自行联系原作者