为什么未为HTML选择严格解析?


38

我经常想知道为什么在创建HTML时没有选择严格的解析。在大多数Internet历史上,浏览器都接受任何形式的标记,并尽力进行解析。该过程会降低性能,使人们书写乱码,并且很难中止过时的功能。

是否有严格解释HTML的特定原因?


7
您可能会发现Joels的文章“ 火星耳机”很有趣。还要特别注意的是RFC 793:稳健性原则,它明确指出TCP实现应尽其所能来解析垃圾。此原则已应用于浏览器。
布赖恩

25
@Brian:健壮性意味着当您丢下垃圾时,您不应该摔倒。这并不意味着您必须胡扯。
Marjan Venema 2013年

2
XHTML确实使用严格的解析。
user16764 2013年

3
是我一个人,还是这些答案都不令人满意?
gsingh2011 2013年

2
@ gsingh2011没有一个答案令人满意,但是我的答案是事实。很久以前,我们这里的一些人活跃在网络上:-)但是,是的,由于如此简单的原因,我们剩下多少垃圾令人惊讶。
Ross Patterson

Answers:


39

原因很简单:在第一个图形浏览器,NCSA Mosiac和后来的Netscape Navigator出现之时,几乎所有HTML都是手工编写的。浏览器作者(Netscape是由前镶嵌人员构建的)很快意识到,拒绝呈现不正确的HTML将受到用户的反对,瞧!


7
+1是的,这就是在vi或记事本中开始的方式。由于大多数页面都是从错误的示例代码复制而来的,所以它从未变得更好。再加上WWW蓬勃发展,因此任何可以打字的人都成为了Web开发人员,而这一切都是为了快速完成工作。
jqa

1
显然,此答案与@Jukka的评论相结合,可以提供最佳的解释
-Shubham

35

因为从浏览器制造商的角度来看,做出最佳猜测是正​​确的事情。考虑一下情况:理想情况下,您收到的HTML完全正确且符合规范。那很棒。但是有趣的是,当HTML 正确时会发生什么。因为我们正在处理来自我们没有影响力的来源的输入,实际上,我们必须为此做好准备。现在,当发生这种情况时,我们该怎么办?我们有两个选择:a)失败,和b)尽最大努力从错误中恢复。如果我们失败了,那么用户只会看到一条无用的错误消息,而他们对此无能为力,因为他们无法控制服务器。如果我们尽力而为,则用户至少拥有我们可以对页面进行的处理,而且通常猜测是正确的。

唯一真正的问题是,当您需要错误消息时(通常是在开发环境中),您需要确保生成的HTML是正确的,并且由于“在浏览器X中工作”不等同于“正确”,我们不能简单地通过浏览器运行它并查看它是否有效:我们不能说出正确的HTML和浏览器已为您修复的错误HTML之间的区别。但是,这是一个可解决的问题。有报告标准违规的浏览器插件,有W3C验证程序,以及许多其他类似工具。


7
好吧,我认为没有人会提供引发错误的HTML。为什么您认为假定代码的编译器与假定HTML的浏览器有所不同。
Shubham 2013年

1
我在这里同意Shubham的观点-“因为我们正在处理对我们没有影响的来源的输入”是错误的,因此影响是间接的,但是由于该影响,某些网站仍支持IE6。
Steve314 2013年

2
@Shubham:编译器是不同的,因为它的目的不是将机器可读的源代码转换成人类可理解的形式,而是将人类可读的源代码转换成对计算机更方便的东西(机器代码或某些中间代码)格式)。使用编译器,您可以修复输入,并且很高兴代码没有将其投入生产。使用浏览器,您会诅咒浏览器制造商或网站作者,但是无论哪种方式,您都无法看到该页面。
tdammers 2013年

2
@Shubham:通常,编译器的用户可以控制正在编译的源代码。网页通常不是这种情况。
supercat 2014年

17

HTML作者和创作工具会产生糟糕的标记。浏览器会出于竞争原因而竭尽全力:如果浏览器无法以任何合理的方式呈现大多数网页,则将被用户拒绝,他们不会在乎它是谁的错。

它与编程语言实现的功能完全不同。编译器和解释器处理的代码可以假定是由程序员编写的,而每个人和他的兄弟都可以在不经过任何培训的情况下编写HTML。从某种意义上说,HTML标记是代码,但它是数据,而不是编程语言指令,并且软件中的(良好)传统应能容忍数据。

XHTML原则上规定了严格的(XML)解析规则,因此,只有XML格式正确的XML内容类型的XHTML文档才会显示–否则,仅将第一个错误传达给用户。它从未在Web创作中流行-几乎所有的“ XHTML”都以纯文本/ html的形式提供,并以非常自由的方式作为传统的标签处理,只是带有一些新的怪癖。


15
HTML authors and authoring tools produce crappy markup.-他们这样做是因为浏览器接受了。如果从一开始浏览器就不接受它-那么这些工具和作者将无法摆脱产生糟糕的标记的作用
user93353 2013年

3
@GrandmasterB-我想您错了-即使市场上只有一个浏览器-它也没有严格的解析。
user93353 2013年

3
有趣的是:您说如果浏览器无法解析无效站点,它将失去市场份额。但是,请看一下ie:它有多糟,它并没有失去市场份额。它只是迫使穷人开发者写脏黑客使用旧的API ...不要让我开始它的版本控制方案...
马克斯

3
最初,浏览器是匆忙编写的,以处理尚未最终确定并且没有官方规范的标记语言-没有严格的解析规则。(1995年,HTML 2.0名义上是基于SGML的,但是现在还不能真正实现。)
Jukka K. Korpela 2013年

2
IE实际上已经失去了很多市场份额。但这可能与严格解析几乎没有任何关系。IE,由于其奇怪之处,统治了网络足够长的时间,以迫使其他浏览器在很大程度上模仿它的奇怪之处,因为否则很多页面就会崩溃。
Jukka K. Korpela

9

简而言之,HTML是基于另一种称为SGML的非超链接标记语言,通常用于文档和手册等。

从有关HTML历史的文章中:

蒂姆(Tim)提到一些早期的HTML文档是基于CERN已经使用的旧SGML语言编写的:-我们在HTML中包含了CERN曾经使用过的SGML标签集的一些标签,并且曾经获得过[...] HTML解析器的支持。将忽略它不了解的标签,并忽略对CERN-SGML标签不了解的属性

大部分早期HTML标签实际上是从CERN SGMLGuid语言获得的,该语言本身是AAP(早期SGML语言)的一种变体。例如,标题,hn,p,ol等显然都来自该语言。唯一的根本变化是添加了所有重要的anchor()链接,没有它,WWW就不会实现。

注意到我已经加粗的部分,基本上,他们实现了他们熟悉的SGML系统中可用标签的子集,添加了新的锚点<a>标签,并选择忽略他们没有使用的许多标签中的任何一个。不必关心或希望出于任何原因而支持(例如书目列表标签,“ xmp”作为“示例”标签,“ box”标签以在文本块周围绘制框等)。因此,最简单的方法是原谅解析器不知道的标记,并尽可能地忽略未知标记,无论原因是用户键入错误的标记,还是将现有文档转换为最简单的最快方法这种新的HTML格式是向现有SGML文档添加一些超链接,而忽略不支持或未实现的任何标签。


HTML语法的标记形式确实基于SGML参考具体语法 。但是SGML本身没有元素用于标记文档HTML可以借用,HTML元素集实际上类似于的IBM的GML文档标记语言,音译为SGML RCS。
罗斯·帕特森

5

这部分是浏览器大战的历史遗迹

IE和netscape争夺市场,并不断发布不断变得“很棒”的新功能,并被迫接受为其他浏览器设计的页面。

这意味着在委员会开始参与之后,浏览器会默默地接受和忽略未知标签。好吧,您有一个委员会来设计内容,因此许多不同的版本(带有一些措辞不明确的规范)都希望浏览器支持大多数版本。它们,并为每个版本创建一个单独的解析器将是一件大事。因此(相对)使用具有不同模式的单个解析器比较容易。

另一方面,netscape和IE希望html对于普通人来说是可访问的(这在当时很流行),这意味着尝试做用户想要做的事情,而不是他说过的事情,并遍历每个悬挂的标签。

使问题更严重的是,还有几个“教程”站点在教授错误的内容并认为它们是正确的,因为它们所教的内容是正确的。

最终,这意味着如果您现在创建的浏览器仅使用严格的html解析99%的站点,将无法正常工作。


6
甚至在IE进入市场之前,Netscape从未进行过严格的解析。我记得网景从1997年年初
user93353

即使有明确的标准,浏览器也很难区分发布浏览器后合法定义的标签和从未使用过且永远不会合法的标签。如果“可选”的标签,其增强的文档,但不要求其语义的正确性包括其执行他们的标准的版本号,然后执行标准的23版浏览器可以直接忽略了<o24wowzo>在标签,但投手犯规<o23wowzo>,但是这样的设计将损害HTML的“人类可读”方面。
supercat 2014年

2

好吧,我们试图在000中建立一个很好的严格选项,但是它没有成功,因为人们盲目地遵循“最佳实践”,将错误的标记归为严格模式,归咎于浏览器。浏览器供应商不喜欢受到指责。

他们声称这是因为他们希望非专业人员可以更轻松地访问Web,但没有人停止使用最宽松形式的HTML 4。

也就是说,如果您希望使用严格的样式布局,则仍可以将HTML5用作XML。IMO可能是一种在更严格的模式下获得布局或UI工作收益的好方法,然后再将其传递给可能会或可能不希望如此严格但没有任何实际风险的其他人(禁止他们将doctype剔除,因为他们实际上更喜欢怪癖模式-应该在2017年(本次编辑之时)将它们拍摄。因此它基本上仍然存在,但需要进行一些研究。我似乎还记得有些XHTML所没有的警告确实会影响版面设计工作。只是不要说“这是做对的唯一方法”,否则买这种话的推特会will绕这个主意,再次责怪浏览器,他们会咬牙切齿。在我们留下的唯一严格的替代方案中。(2017编辑:

http://mathiasbynens.be/notes/xhtml5

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.