正确配置服务器 MIME 类型
MIME类型描述了内容的媒体类型,无论是电子邮件中的内容,还是由Web服务器或Web应用程序提供的内容。它们旨在帮助提示内容应如何被处理和显示。
MIME类型示例
- HTML文档使用
text/html。 - 纯文本使用
text/plain。 - 层叠样式表使用
text/css。 - JavaScript文件使用
text/javascript。 - Markdown文件使用
text/markdown。 - 当预期用户操作时,二进制文件使用
application/octet-stream。
服务器的默认配置差异很大,并为没有定义内容类型的文件设置不同的默认MIME类型值。
2.2.7之前的Apache Web服务器版本被配置为对未知内容类型报告MIME类型text/plain或application/octet-stream。现代版本的Apache对未知内容类型的文件报告none。
Nginx如果未定义默认内容类型,将报告text/plain。
随着新的内容类型被发明或添加到Web服务器,Web管理员可能未能将新的MIME类型添加到其Web服务器的配置中。这对于尊重Web服务器和应用程序报告的MIME类型的浏览器用户来说是主要问题来源。
为什么正确的MIME类型很重要?
如果Web服务器或应用程序为内容(包括未知内容的“默认类型”)报告了不正确的MIME类型,Web浏览器无法知道作者的意图。这可能会导致意外行为。
一些Web浏览器可能会尝试猜测正确的MIME类型。这使得配置错误的Web服务器和应用程序能够继续为这些浏览器工作(但不包括正确实现标准的其他浏览器)。除了违反HTTP规范之外,这还有另外几个重要原因,使其成为一个糟糕的主意
JavaScript的遗留MIME类型
在查找JavaScript MIME类型信息时,您可能会看到几个引用JavaScript的MIME类型。其中一些MIME类型包括
application/javascriptapplication/ecmascriptapplication/x-ecmascriptapplication/x-javascripttext/ecmascripttext/javascript1.0text/javascript1.1text/javascript1.2text/javascript1.3text/javascript1.4text/javascript1.5text/x-ecmascripttext/x-javascript
虽然浏览器可能支持这些替代MIME类型中的任何一种、部分或全部,但您应该只使用text/javascript来指示JavaScript文件的MIME类型。
注意:有关更多信息,请参阅MIME类型 (IANA媒体类型)。
如何确定要设置的MIME类型
有几种方法可以确定用于提供内容的正确MIME类型值。
- 如果您的内容是使用商业软件创建的,请阅读供应商的文档,查看该应用程序应报告哪些MIME类型。
- 在IANA的MIME媒体类型注册表中查找,其中包含所有注册MIME类型的信息。
- 在FILExt或文件扩展名参考中搜索文件扩展名,查看与该扩展名关联的MIME类型。请密切注意,因为应用程序可能具有多个MIME类型,这些类型仅在一个字母上有所不同。
如何检查接收到的内容的MIME类型
-
在 Firefox 中
- 加载文件并转到工具 > 页面信息以获取您访问的页面的内容类型。
- 您还可以转到工具 > Web开发者 > 网络并重新加载页面。请求选项卡会列出页面加载的所有资源。点击任何资源将列出所有可用信息,包括页面的
Content-Type标头。
-
在 Chrome 中
- 加载文件并转到视图 > 开发者 > 开发者工具,然后选择网络选项卡。重新加载页面并选择您要检查的资源。在头部中查找
Content-Type,它将报告资源的内容类型。
- 加载文件并转到视图 > 开发者 > 开发者工具,然后选择网络选项卡。重新加载页面并选择您要检查的资源。在头部中查找
-
在页面源中查找提供MIME类型的
<meta>元素,例如<meta http-equiv="Content-Type" content="text/html">。- 根据标准,如果存在Content-Type标头,则指定MIME类型的
<meta>元素应被忽略。
- 根据标准,如果存在Content-Type标头,则指定MIME类型的
如何设置服务器以发送正确的MIME类型
目标是配置您的服务器,使其为每个文档发送正确的Content-Type标头。
- 如果您正在使用Apache Web服务器,请查看Apache配置:.htaccess的“媒体类型和字符编码”部分,以获取不同文档类型及其对应MIME类型的示例。
- 如果您正在使用Nginx,请注意Nginx没有
.htaccess等效工具,因此所有更改都将进入主配置文件。 - 如果您正在使用服务器端脚本或框架生成内容,指示内容类型的方式将取决于您使用的工具。请查阅框架或库的文档。
无论您使用何种服务器系统,您需要实现的效果是设置一个名为Content-Type的响应头,后跟冒号和空格,再后跟MIME类型。高级环境通常允许在生成页面时设置此类头。例如,在PHP环境中,您可以这样设置PDF资源的响应头:
header('Content-Type: application/pdf')
尝试仅使用header('application/pdf')设置它将不起作用。