Properly Configuring Server MIME Types

这篇翻译不完整。请帮忙从英语翻译这篇文章

Background

默认情况下,许多web服务器会为那些未知内容类型的文件配置一个默认MIME类型text/plain 或者application/octet-stream 。当一种新的内容类型被创造或者被添加到web服务器上,web管理者在添加它到web服务器配置中可能会失败。主要原因是用户使用Gecko-based 的浏览器,而这种浏览器只相信由web服务器和web应用所发布的MIME类型

What are MIME types?

MIME类型描述了邮件或者web服务器或者web应用中的媒体内容的类型,其目的是为了指导web浏览器对媒体内容的处理和表现。MIME类型的示例如下:

  • text/html  对于一般网页
  • text/plain 对于一般文本
  • text/css 对于级联样式表
  • text/javascript 对于脚步
  • application/octet-stream 意味着“下载这个文件”
  • application/x-java-applet 对于 Java applets
  • application/pdf 对于 PDF 文档

Technical Background

完整的MIME类型列表可在 IANA | MIME Media Types 查看.

HTTP specification 中定义了能够描述在web中使用的媒体类型的MIME超集。

Why are correct MIME types important?

Example of an incorrect MIME type result 假如web服务器或者应用报告内容的MIME类型不正确,根据HTTP规范,或许发起人想要处理和显示内容通过他所规定的MIME类型,因此web浏览器无法采取任何措施。

对于某些浏览器,例如IE,它尝试允许web服务器对于错误配置通过其源码猜测它可能的正确MIME类型。

这种做法将会避免许多由web管理员他们的错误。因为当内容的MIME类型错误,IE将会用可能正确的MIME类型来继续处理内容。例如你设置一个img的类型为text/plain ,IE可能会设置它为正确的MIME类型images/*

出于安全原因,使用正确的MIME类型的服务内容也是重要的; 恶意内容可能会影响用户的计算机,假装它是一个安全类型文档,实际上不是。

注意: 从历史角度, 只要HTML文档请求处理CSS文件 ,Firefox 能够正常加载CSS即使它设置了错误的MIME类型。处于安全原因, Gecko 2.0 对于从请求文档不同来源加载的样式表,将不再这样做。如果CSS来自于不同来源,你必须设置它的正确MIME类型 (text/css).

Gecko 1.9.1.11 (Firefox 3.5.11) 和 Gecko 1.9.2.5 (Firefox 3.6.5) 同样实施这种安全措施,但是提高它的实用性。如果样式表中的第一行看起来是一个很好的CSS构造,则存在允许加载的临时启发式算法。在Firefox 4中已经删除了启发式,您必须正确设置text/css 的MIME类型,才能够识别CSS。

为何浏览器不应该猜测 MIME 类型

除了违返了HTTP规范,让浏览器去猜测正确的MIME类型是一个差劲的策略。原因如下

失去控制

假如浏览器忽略报告的MIME类型,web管理员和用户不在对内容如何进行处理有发言权了。

例如,面对web开发员的网址可能希望发送某些实例HTML文档,同时通希望能够以 text/html或者 text/plain 的MIME类型进行数据的处理和显示 或者 作为一个源代码。如果浏览器猜测它的正确MIME类型为 text/html 那么开发员不在有权利进行选择了。

安全性

一些内容类型,例如可执行程序,本质上是不安全的。原因是经过规范化的MIME类型都有经过严格规定浏览器如何对这类类型的文件进行操作。一个可执行程序不能够在用户的电脑浏览器上执行,但可以通过弹出会话询问是否下载这个文件

MIME类型猜测导致IE浏览器的安全漏洞(通过利用IE能够将错误的MIME类型 修改为正确的类型)。这绕过了正常的下载对话框,导致InternetExplorer猜测内容是可执行程序,然后在用户的计算机上运行。

如何确定服务器发送内容的 MIME 类型

通过开发者工具的 ContentType 查看MIME类型。

根据标准,通过一个 meta 标签来设置MIME类型 例如 <meta http-equiv="Content-Type" content="text/html"> 当包含Content-Type 时则忽略 meta 标签

 

如何为你的内容确定正确的 MIME 类型

这里有几种方法来确定文件的正确MIME类型

  1. 如果你的内容是通过供应商软件应用创建的,那么你可以阅读供应商文档确认不同媒体文件的MIME值
  2. 通过查看完整的MIME类型表 IANA | MIME Media Types registry 
  3. 如果使用插件netscape gecko显示媒体类型,请安装插件,然后查看“帮助”>“关于插件”菜单,以查看哪些MIME类型与媒体类型相关联。
  4. 搜索文件扩展名 FILExt 或者File extensions reference ,确认扩展名和哪种类型的MIME相关联

How to set up your server to send the correct MIME types

基本的方法是配置你的服务器发送正确的HTTP ContentType类型给每个文档

  • If you're using the Apache web server, simply copy this sample .htaccess file to the directory that contains the files that you want to send with the correct MIME types. If you have an entire subdirectory of files, just place the file in the parent directory; you need not place it in each subdirectory.
  • If you're using Microsoft IIS, see this article at Microsoft TechNet.
  • If you're using a server-side script to generate content, you can generally add one line near the top of your script. You can serve content other than HTML from Perl, PHP, ASP, or Java — just change the MIME type accordingly.
    • For Perl CGI, you should have the line print "Content-Type: text/html\n\n"; before any other output lines. If you're using the CGI module, you can use the line print $cgi->header('text/html'); instead, where $cgi is your reference to the CGI instance.
    • For PHP, you should have the line header('Content-Type: text/html'); before any other output lines.
    • For ASP, you should have the line response.ContentType = "text/html"; before any other output lines.
    • For a Java servlet, you should have the line response.setContentType("text/html"); at the top of your doGet or doPost method, where response is a reference to the HttpServletResponse.

Original Document Information

  • Author: Bob Clary, date: 20 Feb 2003

文档标签和贡献者

标签: 
此页面的贡献者: Roscoe93, 651291702
最后编辑者: Roscoe93,