假设我有以下链接标签: <a href="tel:+15555555">Phone number</a>
。
究竟如何在浏览器不知道要加载的相对位置./tel:+15555555
从目前的服务器,而是知道tel
应该被解释为一个计划?
检测主机相对URL( /…
)或相对协议网址( //…
)似乎是微不足道的。 我想HTTP的URL( http://…
或https://…
)是简单的特殊情况也是如此。 但如何在浏览器去使用任意方案解析URL? 我知道一个有效的方案必须以小写字母,而只能包含小写字母或字符+
, -
和.
,这在一定程度限制了范围。当然我知道,整个问题只适用于相对URL是有效的(即大部分的范围href
和src
属性)。
我在寻找的链接到一些RFC(例如,它禁止非URL编码的冒号是什么,但方案的分隔符)以及各种浏览器的URL解析内部的源代码。
href值被解析为URI(参见RFC 3986)。 作为分析的结果,浏览器就知道这是一个绝对的URL,而不是相对引用。
由于事实上,不转义“:”是允许在路径分量; 这只是他们所需要的第一个“/”之后发生; 否则,如果前面的字符都是有效的方案名称的字符他们可能被解析为方案的分隔符。
见http://greenbytes.de/tech/webdav/rfc3986.html#path
RFC还具有以下的说第4.2节 (标题为“相对参考”):“ 包含冒号字符的路径段(例如,‘这一点:’)不能被用作相对路径参考的第一段,因为这会被误认为是方案名称。 (例如,“./this:that”)进行相对路径参考“。(强调)这样的段必须由点段之前。
请参见RFC 3966的tel
URI规范, RFC 3986的更通用的URL规范。 这是冒号( :
从“票数部分”分离方案)。
文章来源: How do browsers determine whether an URL in an href is relative or not when using a scheme?