当服务器发送正文中包含 HTML 文档的 HTTP 响应时,它通常会使用 text/html
内容类型。如果响应是 HTML 片段,内容类型是否应该不同?
例如,如果请求是来自客户端脚本的 AJAX,并且整个响应正文是 <div><p>New text</p></div>
那么响应不是 HTML 文档。应用程序是否应将内容类型设置为 text/html
以外的类型对于这样的片段?如果是,是什么?
最佳答案
关于 XML/HTML 文档片段, xml-fragment
除外在评论中引用(现在标记为“不再维护”),似乎没有对文档片段和内容类型标题的任何明确的官方引用。但是,需要考虑一些要点:
关于
Content-Type
,xml 片段规范对完整文档和片段的处理方式相同。 .关于 MIME Types 的 MDN 文档不区分完整文档和片段(添加了强调):
All HTML content should be served with this type. Alternative MIME types for XHTML (like application/xml+html) are mostly useless nowadays (HTML5 unified these formats).
W3 规范 8.4 Parsing HTML Fragments明确列出处理 HTML 文档片段的案例。除非解析器失败(遇到解析器错误),否则它假定给定的字符串是 HTML。此外,浏览器收到无效/部分 HTML 的频率非常高,并且会尽可能完整地呈现(而不是完全失败)。
minimum tags required对于完全无效的 HTML 文档是:
- 文档类型:
<!DOCTYPE html>
- 声明文档模式,特别是规范要求它们“for legacy reasons” - 标题:
<title>My Page</title>
省略这些必需元素不会改变内容的性质。在实际意义上,
<p>hello world
仍然几乎被普遍解释为 HTML,它只是不是一个有效的文档。- 文档类型:
RFC 标准 defining MIME types仅明确定义
text/plain
, 虽然 RFCContent-Type
header spec引用文献text/html
.这显然没有提供明确的指导,也没有定义可能的替代方案。
鉴于来自 W3 的唯一相关引用指出完整的 XML 文档和片段被视为相同(并且 HTML 是 XML 的子集),W3 片段解析算法没有区别(并假设它正在接收 HTML),MDN 建议反对使用任何替代 header ,并且没有广泛接受的(甚至没有任何值得注意的)替代品,使用 text/html
对于文档片段将是明确的选择。我找不到任何其他建议的先例,并且使用某些自定义 MIME 类型可能只会引起混淆(或更糟)。
如果您真的想在您的应用程序中区分完整文档和片段,您可以将其包装在 JSON 中,或者从您的服务器发送一个额外的自定义 header (我找不到任何关于此的常见做法的引用,并且可能会让其他开发者感到困惑)。
关于html - HTML 片段的内容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19303361/