【问题标题】:Is sending plain text HTML as just the plain text bad?将纯文本 HTML 作为纯文本发送是否不好?
【发布时间】:2020-12-12 14:17:17
【问题描述】:

如果我说:

Welcome

代替:

<!DOCKTYPE html>
<html>
  <body>
    Welcome
  </body>
</html>

在我的index.html 中,这会导致某些浏览器出现问题吗?

【问题讨论】:

    标签: html undefined-behavior


    【解决方案1】:

    浏览器依靠 HTTP Content-Type 标头来确定应该如何解析内容。

    “以纯文本发送”通常是指使用Content-Type: text/plain,但我假设您的 index.html 始终以text/html 发送,问题仅与文件内容有关。

    使用Content-Type: text/html 调用HTML 解析器,它为两个输入生成几乎相同的DOM,除了DOCTYPE 声明(假设您的意思是&lt;!DOCTYPE html&gt;,而不是DOCKTYPE)。

    一般来说,省略 DOCTYPE 会将页面放入所谓的"quirks mode",其中有a number of effects in certain edge-cases

    【讨论】:

      【解决方案2】:

      当浏览器尝试construct the DOM tree 时,它会发现stack of open elements 为空。因此,insertion mode 将设置为 initial,如参考链接中所述:

      插入模式是控制初级的状态变量 树构建阶段的操作。 最初,插入模式是“初始”。

      因此,您到达Initial insertion mode 并遵循一系列其他情况,当它们经历几种插入模式时,会自动继续创建和关闭&lt;html&gt;&lt;head&gt;&lt;body&gt; 标记,并在后者中附加您的纯文本。

      但是要知道,如果您仅发送带有 .txt 文件的纯文本,浏览器也会将任何最终标记视为纯文本并将所有内容包装到 &lt;pre&gt; 标记中,因为内容类型很可能设置为 text/plain 并且浏览器假定您希望以纯文本形式查看所有内容。

      相反,在您的情况下,将纯文本放入 .html 文件中仍会将内容类型设置为 text/html,从而使浏览器能够识别其中写入的最终标签,而无需将您的代码包装到 &lt;pre&gt; 标签中。
      因此,在最后一种情况下,您的问题中显示的两个内容创建的 DOM 树将没有区别。

      实际上除了一个:在您的情况下,DOCTYPE 声明被省略,这将使浏览器使用 Quirk mode 而不是标准页面呈现您的页面,这可能会导致 unwanted results

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-12
        • 2014-09-08
        • 1970-01-01
        • 2014-04-21
        • 1970-01-01
        • 2013-05-19
        • 1970-01-01
        相关资源
        最近更新 更多