正确配置服务器 MIME 类型
MIME 类型描述内容的媒体类型,无论是电子邮件,还是由 Web 服务器或 Web 应用程序提供的。它们旨在提供关于如何处理和显示内容的提示。
MIME 类型示例
text/html
用于 HTML 文档。text/plain
用于纯文本。text/css
用于层叠样式表。text/javascript
用于 JavaScript 文件。text/markdown
用于 Markdown 文件。application/octet-stream
用于需要用户操作的二进制文件。
服务器默认配置差异很大,对于没有定义内容类型的文件,会设置不同的*默认* MIME 类型值。
2.2.7 之前的 Apache Web Server 版本配置为对于未知内容类型报告 text/plain
或 application/octet-stream
的 MIME 类型。现代版本的 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/javascript
application/ecmascript
application/x-ecmascript
application/x-javascript
text/ecmascript
text/javascript1.0
text/javascript1.1
text/javascript1.2
text/javascript1.3
text/javascript1.4
text/javascript1.5
text/x-ecmascript
text/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
,它将报告资源的内容类型。
- 加载文件并转到**查看 > 开发人员 > 开发人员工具**并选择*网络*选项卡。重新加载页面并选择要检查的资源。在标头下查找
- 在页面源代码中查找一个
<meta>
元素,该元素提供了 MIME 类型,例如<meta http-equiv="Content-Type" content="text/html">
。- 根据标准,如果存在 Content-Type 标头,则应忽略指定 MIME 类型的
<meta>
元素。
- 根据标准,如果存在 Content-Type 标头,则应忽略指定 MIME 类型的
IANA 保持一个已注册的 MIME 媒体类型 列表。 HTTP 规范 定义了 MIME 类型的超集,用于描述在 Web 上使用的媒体类型。
如何设置您的服务器以发送正确的 MIME 类型
目标是配置你的服务器,以便为每个文档发送正确的 Content-Type
标头。
- 如果你使用的是 Apache Web 服务器,请查看 Apache 配置:.htaccess 的**媒体类型和字符编码**部分,以获取不同文档类型及其对应 MIME 类型的示例。
- 如果你使用的是 Nginx,请注意 Nginx 没有与
.htaccess
等效的工具,因此所有更改都将进入主配置文件。 - 如果你使用服务器端脚本或框架来生成内容,指示内容类型的方式将取决于你使用的工具。查看框架或库的文档。
无论你使用什么服务器系统,你需要实现的效果都是设置一个名为 Content-Type
的响应标头,后面跟着一个冒号和空格,以及一个 MIME 类型。高级环境通常允许在生成页面时设置此类标头。例如,在 PHP 环境中,你可以像这样设置 PDF 资源的响应标头
header('Content-Type: application/pdf')
尝试仅使用 header('application/pdf')
设置它将不起作用。