为啥 MIME 类型用于 HTML 文本,而 MIME 类型用于 XHTML 应用程序?

Posted

技术标签:

【中文标题】为啥 MIME 类型用于 HTML 文本,而 MIME 类型用于 XHTML 应用程序?【英文标题】:Why is the MIME Type for HTML text but the MIME Type for XHTML application?为什么 MIME 类型用于 HTML 文本,而 MIME 类型用于 XHTML 应用程序? 【发布时间】:2012-02-27 09:23:55 【问题描述】:

是什么使 Xhtml(和其他 XML 语言)应用程序,而其他基于 SGML 的语言是文本? XML 文件不是文本文件吗?

【问题讨论】:

HTML 不再基于 SGML。 【参考方案1】:

XHTML 是 XML 的一个子集; XML 的媒体类型/mime 是 text/xml 而 XHTML 的媒体类型/mime 是 application/xhtml+xml

通常,HTML 本质上被视为解释非常松散的纯文本。因为 HTML 的垃圾状态声誉 XHTML 的创建是为了迫使 Web 设计人员和 Web 开发人员编写干净的 HTML 代码。 Gecko (Firefox) 和 Presto (Opera) 浏览器正确地破坏页面并显示格式错误的 XML 解析错误,而 WebKit (Chrome/Safari) 和 Trident(仅限 Internet Explorer 9.0+)在失败时失败并且只是停止呈现页面。

作为 text/html 服务的 XHTML 应用程序不是 XHTML,它是带有 XHTML 文档类型的 HTML。

对于要作为 XHTML 应用程序提供的 XHTML 代码,它必须作为 application/xhtml+xml 提供。

XHTML 还旨在向后兼容 HTML。

如果浏览器支持(所有 Chrome、Safari 3.0+(可能是 1.0))、Mozilla Suite 0.8+/所有 Firefox,以下 php 代码将查看客户端浏览器发送的标头并将页面作为 XHTML 应用程序提供和 Opera 7.0+(可能是 6.0)支持 XHTML。只有 Internet Explorer 8.0 和更早版本有任何不支持 XHTML 的市场份额。 KHTML 浏览器(Konqueror)确实支持 XHTML,但是我认为 4.4 确实/没有向服务器提供正确的标头。

<?php
$http_accept_xhtml = stristr($_SERVER['HTTP_ACCEPT'],'application/xhtml+xml');

if ($http_accept_xhtml) $mime = 'application/xhtml+xml';
else $mime = 'text/html';

header('Content-Type: '.$mime);
echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
?>

如果你足够聪明,可以在遇到错误时修复它们,那么 XHTML 比 HTML 要好得多。它更严格,但这就是重点,主观性要少得多。 XHTML 中的 X 代表可扩展,因此如果您稍加阅读,它在 HTML 之前就支持 SVG 和其他语言。

【讨论】:

【参考方案2】:

对于多种数据,有几种可接受的 MIME 类型。例如,XML 可以是 text/xml 或 application/xml (http://tools.ietf.org/html/rfc3023)。

HTTP 充满了多种正确的做事方式;它是被这么多人设计和使用的副产品。它也在不断发展。一般来说,即使只有一种设计方法,也可以有多种使用方法,并且在足够多的人接受它们后,这些方法就会成为事实上的标准。

如果您认为您的 XHTML 和 SGML 都是“应用程序”并且一切正常并且让您更快乐,您没有发现任何问题,那就去吧。

【讨论】:

以上是关于为啥 MIME 类型用于 HTML 文本,而 MIME 类型用于 XHTML 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

哪些 MIME 类型用于 HTML/网页

IIS 时常不让下载文件,为啥?

用于 RSS 提要的正确 MIME 类型是啥?

MIME 类型

为啥我得到一个“df.worker.min.js”被加载,即使它的 MIME 类型(“text/html”)不是一个有效的 JavaScript MIME 类型”

为啥 .WMV 文件的 mime 类型为“video/x-ms-asf”而不是“video/x-ms-wmv”?