【问题标题】:Why is http:///example.org (with triple slash) treated as a valid URL by Firefox and webkit?为什么 http:///example.org(带有三斜杠)被 Firefox 和 webkit 视为有效 URL?
【发布时间】:2014-05-11 11:03:03
【问题描述】:

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

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

【问题讨论】:

  • "这是浏览器中的错误,还是符合 RFC 的有效行为?" - 你知道可能两者都不是。如果用户不小心输入了一个额外的斜杠,我认为他们宁愿让浏览器为他们删除它,也不愿拥有一个严格执行 RFC 3986 的浏览器。
  • 可能是因为实现了这种行为是 RFC 中的标准?我可以想象一个用户不小心输入了太多斜杠的场景,也许 Firefox 知道根据 RFC,只有双斜杠可以在权限之前,并相应地更改它。
  • 是的,你说得对,这也是一种可能。在那种情况下,我担心这对其他程序的安全影响,这些程序希望遵循 RFC。

标签: http firefox webkit uri rfc3986


【解决方案1】:

“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 的 cmets。 “http”URI 是使用 URLTYPE_AUTHORITY 标志创建的,这会导致您看到的行为(根据 nsIStandardURL.idl 的第 31 行)。

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

【讨论】:

    猜你喜欢
    • 2012-10-18
    • 2010-10-30
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    相关资源
    最近更新 更多