为啥 http:///example.org(带有三斜杠)被 Firefox 和 webkit 视为有效 URL?

Posted

技术标签:

【中文标题】为啥 http:///example.org(带有三斜杠)被 Firefox 和 webkit 视为有效 URL?【英文标题】: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。 【参考方案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 的“权限”部分。

【讨论】:

以上是关于为啥 http:///example.org(带有三斜杠)被 Firefox 和 webkit 视为有效 URL?的主要内容,如果未能解决你的问题,请参考以下文章

当我转到第 2 页时,为啥分页器不记得我的自定义参数?

我一直在codeigniter的ajax网址中找不到404错误

php使用JWT

我在哪里可以找到 Rails 作业的域设置?

Spring Boot CORS url ***域/路径不起作用

Magento 2中的htaccess 301重定向