5

当 URLhttp:///example.org在 Firefox 或基于 webkit 的浏览器中打开时,它会打开http://example.org. 我想知道这是否是一种有效的行为,即是否应该去除多余的斜线并将example.org其视​​为授权组件。我阅读了规范(RFC 3986),我的印象是这样的 URI 的权限组件应该被认为是空的。其他一些 HTTP 客户端(例如 curl 或 links2)不会解析 URL。

这是浏览器中的错误,还是符合 RFC 的有效行为?编辑:或者一个预期的功能,以使浏览器更加用户友好?

4

1 回答 1

7

“http”协议的规范要求 URI 中有一个主机名。请参阅http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.2.2。所以这个字符串http:///foo不是一个有效的 http URI,浏览器面临着如何处理这个无效的 URI 字符串的问题。

Gecko (Firefox) 所做的是它的 URI 解析器实际上具有依赖于方案的行为,它会根据 URI 方案假定您的意思并进行某些修复。请参阅http://mxr.mozilla.org/mozilla-central/source/netwerk/base/public/nsIStandardURL.idl?rev=f4157e8c4107&mark=20-23,28-31,36-39#20上的评论。“http” URI 是使用 URLTYPE_AUTHORITY 标志创建的,这会导致您看到的行为(根据 nsIStandardURL.idl 的第 31 行)。

请注意,目前在http://url.spec.whatwg.org/上尝试标准化 URI 应如何在网页和 Web 浏览器中解析,并且在http://url.spec.whatwg上有一个方案白名单。 org/#relative-scheme有这样的行为。如果您逐步完成该白名单中方案的解析算法,一旦看到“:”,您就会进入http://url.spec.whatwg.org/#authority-first-slash-state的状态,该状态基本上处理 0 或更多的斜杠都等同于“//”,并继续将斜杠后面的内容解析为 URL 的“权限”部分。

于 2014-04-01T02:12:41.153 回答