html - 浏览器在使用 scheme 时如何确定 href 中的 URL 是否是相对的?

标签 html http url browser url-protocol

假设我有以下链接标签:<a href="tel:+15555555">Phone number</a> .

浏览器到底是怎么知道不加载相对位置的./tel:+15555555来自当前服务器,而是知道 tel应该被解释为一个方案?

检测主机相对 URL(/…)或协议(protocol)相对 URL(//…)似乎是微不足道的。我想 HTTP-URL(http://…https://…)对于特殊情况也很简单。但是浏览器如何使用任意方案解析 URL?我知道一个有效的方案必须以小写字母开头,并且只能包含小写字母或字符 + , -. ,这在一定程度上限制了范围…… 当然,我知道整个问题只涉及相对 URL 有效的范围(即主要是 hrefsrc 属性)。

我正在寻找一些 RFC 的链接(例如,它禁止非 URL 编码的冒号除了方案分隔符之外的任何东西)以及各种浏览器的 URL 解析内部的源代码。

最佳答案

href 值被解析为 URI(参见 RFC 3986)。作为解析的结果,浏览器将知道这是一个绝对 URI,而不是相对引用。

事实上,路径组件中允许使用未转义的“:”;只是它们需要出现在第一个“/”之后;否则,如果前面的字符都是有效的方案名称字符,它们可能会被解析为方案定界符。

参见 http://greenbytes.de/tech/webdav/rfc3986.html#path

RFC 在 section 4.2 中也有以下内容(标题为“相对引用”):“包含冒号(例如,“this:that”)的路径段不能用作相对路径引用的第一段,因为它会被误认为是方案名称。这样的段之前必须有一个点段(例如,“./this:that”)以进行相对路径引用。” (强调已添加)。

关于html - 浏览器在使用 scheme 时如何确定 href 中的 URL 是否是相对的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14768153/

相关文章:

java - HTTPUrlConnection 和 .torrent 文件

java - 如何从java中的url下载图像?

android - 如何让我的 EditText 字段显示当前网页 URL?

html - IE 中的表格宽度 100% 会导致问题

javascript - HTML block 放置的逻辑

jquery - 将一个 html 页面覆盖在另一个页面上

html - 如何更改 Eclipse 中 CSS 和 HTML 的默认设置

Android:到本地主机网站的 HTTP 连接

http - (Go)发送http请求时如何控制gzip压缩?

javascript - 从 IFRAME 获取当前 URL