36

当服务器发送带有 HTML 文档正文的 HTTP 响应时,它通常会使用text/html内容类型。如果响应是 HTML 片段,内容类型是否应该不同?

例如,如果请求是来自客户端脚本的 AJAX,并且整个响应正文是<div><p>New text</p></div>,则响应不是 HTML 文档。应用程序是否应该将内容类型设置text/html为此类片段以外的其他内容?如果是这样,是什么?

4

3 回答 3

6

关于 XML/HTML 文档片段,除了xml-fragment评论中引用的(现在标记为“不再维护”)之外,似乎没有任何明确的官方引用文档片段和内容类型标题。但是,有几点需要考虑:

  • xml-fragment 规范对完整文档和片段的处理方式与Content-Type.

  • 关于MIME 类型的 MDN 文档对完整文档和片段没有区别(添加了重点):

所有的 HTML 内容都应该使用这种类型。XHTML 的替代 MIME 类型(如 application/xml+html)如今大多无用(HTML5 统一了这些格式)。

  • W3 规范8.4 Parsing HTML Fragments明确列出了处理 HTML 文档片段的案例。除非解析器失败(遇到解析器错误),否则它假定给定的字符串是 HTML。此外,浏览器非常频繁地接收无效/部分 HTML,并尽可能地呈现(而不是完全失败)。

    完整的 void HTML 文档所需的最少标签是:

    • DOCTYPE:<!DOCTYPE html>- 声明文档模式,特别是规范要求它们“出于遗留原因
    • 标题:<title>My Page</title>

    省略这些必需元素不会改变内容的性质。在实际意义上,<p>hello world它仍然几乎被普遍解释为 HTML,它只是不是一个有效的文档。

  • 定义 MIME 类型的 RFC 标准仅明确定义text/plain,尽管RFCContent-Type标头规范引用text/html。这显然没有提供明确的指导,也没有定义可能的替代方案。

鉴于 W3 中唯一的相关参考声明完整的 XML 文档和片段被视为相同(并且 HTML 是 XML 的子集),W3 片段解析算法没有区别(并假设它正在接收 HTML),MDN 建议不要使用在任何替代标题中,并且没有被广泛接受(甚至任何值得注意的)替代方案,使用text/html文档片段将是明确的选择。我找不到其他建议的先例,并且使用某些自定义 MIME 类型可能只会引起混淆(或更糟)。

如果你真的想在你的应用程序中区分完整文档和片段,你可以用 JSON 包装它,或者从你的服务器发送一个额外的自定义标头(我找不到任何关于这方面的常见做法的参考,并且可能只是让其他开发人员感到困惑)。

于 2018-01-16T09:13:44.640 回答
3

这是个人喜好。如果它只是您的应用程序,那么没关系。我会保留它,text/html因为它仍然是 HTML 标记,即使不是完整的文档。

于 2013-10-10T18:27:18.183 回答
0

是的,我也在解决这个问题。但是,如果您对现有 HTTP 标头到您的用例的映射不完全满意,那么创建自己的 HTTP 标头是完全可以的。在这个方向上,现在不推荐使用基于https://www.rfc-editor.org/rfc/rfc6648“X- ”的标头。基本上,只要您选择一种足够独特和有意义的哑剧类型,您就可以自由地发明自己的哑剧类型。但正如@Wrikken 在他的评论中提到的那样,这可能是有问题的。因此,为了避免所有这些,您可以使用 text/html 或通过 JSON 方式而不是<div>方式来实现。在一个理想且可扩展的世界中,服务器端应该免于创建 HTML/DIV

于 2018-01-19T08:04:03.150 回答