HTML 规范的哪一部分导致尖括号内的 URL 被解析为具有属性的 <http:> 元素?

Which part of the HTML specification cause a URL within angle-brackets to be parsed as an <http:> element with attributes?

这是我的 HTML 代码。

<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head>
    <title>Bar</title>
    <script>
    window.onload = function() {
        console.log(document.body.innerHTML)
    }
    </script>
</head>
<body>
<http://www.example.com/foo/bar/baz.html>
</body>
</html>

我将此代码保存在名为 bar.html 的文件中,然后使用 Firefox 或 Chrome 打开页面。这是我在控制台中看到的输出。

<http: www.example.com="" foo="" bar="" baz.html="">


</http:>

现在我明白我的代码是不正确的,因为它有一个 URL 包含在 <>.

我想了解浏览器究竟是如何将其解析为 http: 标记,其中部分 URL 被解释为 HTML 属性。

HTML 规范中是否有某些部分会导致这种行为?如果是这样,您能否引用 HTML 规范的这些部分?

据我所知,

HTML 规范定义了 HTML 概念,但没有定义如何解析它。解析算法是浏览器程序员的内部课题,他们尽最大努力解析 HTML 即使有错误。

您需要知道的一切都在 section 8.2.4 中。特别是:

  1. 最多 <http:,解析器在 tag name state。元素的标签名称是 http:,包括冒号,由 </http:> 结束标签证明。

  2. 第一个 / 将解析器切换到 self-closing start tag state

  3. second / 导致解析错误,如步骤 2 中 link 所述,将解析器切换到 before attribute name state.

  4. 解析器进入 attribute name state 并继续使用 URL。这就是导致路径的路径被视为属性名称的原因。

  5. 当解析器到达下一个/时,它切换回自闭合开始标记状态并重复步骤2和3,只是不是第二个/ 但一个不同的字符(不是 >)会导致解析错误并将解析器切换回步骤 3 中的属性名称之前的状态。

  6. 一旦解析器最终看到 >,它就会关闭开始标记,发出它,然后照常进行。