将纯文本HTML当作纯文本发送是不好的吗?

问题描述

如果我放:

Welcome

代替:

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

在我的index.html中,这会在某些浏览器上引起问题吗?

解决方法

浏览器依靠HTTP Content-Type标头来确定内容的解析方式。

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

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

通常,省略DOCTYPE会将页面放在具有"quirks mode"的所谓的a number of effects in certain edge-cases中。

,

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

插入模式是一个控制主变量的状态变量 树木建造阶段的运作。 最初,插入模式为“初始”。

因此,您进入Initial insertion mode,并遵循一系列其他案例,这些案例在经历几种插入模式时会自动继续创建并关闭ef<html>标签,并在其中添加您的纯文本。

但是,如果您仅发送带有.txt文件的纯文本,浏览器会将所有最终标签也视为纯文本,并将所有内容包装到<head>标签中,因为内容类型将可能设置为<body>,并且浏览器假定您希望将所有内容都显示为纯文本。

相反,在您的情况下,将纯文本放入.html文件仍然会将content-type设置为<pre>,使浏览器可以识别最终写入其中的标签,而无需将代码包装到text/plain标签中。
因此,在最后一种情况下,问题中显示的两个内容所创建的DOM树不会有任何区别。

实际上不是一个:在您的情况下,text/html声明被省略,这将使浏览器使用Quirk mode而不是标准的unwanted results来呈现页面。 }。