Answers:
您正在寻找的资源是RFC 3986。
请参阅第4.2节和第5.4节。引用后者:
参考分辨率示例
在具有良好定义的基本URI的表示中:
http://a/b/c/d;p?q
相对引用将转换为其目标URI,如下所示:
"g:h" = "g:h" "g" = "http://a/b/c/g" "./g" = "http://a/b/c/g" "g/" = "http://a/b/c/g/" "/g" = "http://a/g" "//g" = "http://g" "?y" = "http://a/b/c/d;p?y" "g?y" = "http://a/b/c/g?y" "#s" = "http://a/b/c/d;p?q#s" "g#s" = "http://a/b/c/g#s" "g?y#s" = "http://a/b/c/g?y#s" ";x" = "http://a/b/c/;x" "g;x" = "http://a/b/c/g;x" "g;x?y#s" = "http://a/b/c/g;x?y#s" "" = "http://a/b/c/d;p?q" "." = "http://a/b/c/" "./" = "http://a/b/c/" ".." = "http://a/b/" "../" = "http://a/b/" "../g" = "http://a/b/g" "../.." = "http://a/" "../../" = "http://a/" "../../g" = "http://a/g"
这意味着当http://a/b/c/d;p?q
您使用基本URI时//g
,相对引用将转换为http://g
。
../g
-它会使用当前协议并指向http://a/b/c/g
。
xml:base
来显式设置任何元素。默认情况下,HTML中的基本URI是页面的相同URI(但在CSS文件中,基本URI是相对于CSS uri的,而不是包含HTML的HTML,但是较旧的IE却是相对于HTML的)。在其他协议和语言中,它可以不同(例如,在XSLT中,它取决于当前项目)。另请参阅<html:base>
。
http
!它取决于页面上下文的协议。如果将上下文加载到http://a/b/c/d;p?q
,则//g
确实解析为http://g
。但是,如果页面按原样加载,http://a/b/c/d;p?q
则结果为https://g
。并且也不要忘记其他协议,例如file://
(页面是从磁盘加载的),这肯定会让您头疼。
这些是协议相关的URL。它们指向一个地址,保留当前协议。
此表示法通常用于避免“混合内容”问题(IE警告消息抱怨http
和https
HTTPS页面上存在资源)。
更新:RFC 3986中的官方文档:
以两个斜杠字符开头的相对引用称为网络路径引用;这种参考很少使用。以单个斜杠字符开头的相对参考称为绝对路径参考。不以斜杠字符开头的相对参考称为相对路径参考。