假设我有以下链接标签:<a href="tel:+15555555">Phone number</a>
.
浏览器到底是怎么知道不加载相对位置的./tel:+15555555
来自当前服务器,而是知道 tel
应该被解释为一个方案?
检测主机相对 URL(/…
)或协议(protocol)相对 URL(//…
)似乎是微不足道的。我想 HTTP-URL(http://…
或 https://…
)对于特殊情况也很简单。但是浏览器如何使用任意方案解析 URL?我知道一个有效的方案必须以小写字母开头,并且只能包含小写字母或字符 +
, -
和 .
,这在一定程度上限制了范围……
当然,我知道整个问题只涉及相对 URL 有效的范围(即主要是 href
和 src
属性)。
我正在寻找一些 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/