点击页面中的链接,浏览器会根据源码中相对URL路径作不同的处理:
(1)有协议名称,但没有域名信息
对于这种形式的URL,它的协议,路径,查询字符串和片段ID都以它自身为准,但域名信息的部分,以引用它的那个页面地址为准。
(2)没有协议名,但有域名信息
协议名称由原发起页面确定,而所有接下来的URL信息都取自这个相对URL,构成完整的URL。
(3)没有协议名,没有域名信息,但有路径
如果网页中明确给出了base标签, 那么得到的URL是 base URL +路径。
如果没有给出base标签,这种情况下分为两种结果:
a) 如果相对URL的开头是斜杠(根目录),则忽略当前页面自身的URL信息,直接把相对路径拼在当前页面的域名后面。
b) 如果相对URL的开头不是斜杠,则将当前页面URL的最后一个/之后的内容去掉,将剩余的内容返回作为base URL,相对路径拼接在其后。
(4)没有协议名,没有域名信息,没有路径,但有查询字符串
协议,域名,路径信息全部原封不动的从原引用URL复制过来,查询字符串和片段ID则来自相对URL。
(5)只有fragment
只替换fragment部分,其他所有信息从原引用URL复制过来。
<base>标签
浏览器会从当前页面的 UR中提取相应的部分来填写相对 URL 中的空白。使用 <base> 标签可以改变这一点。浏览器随后将不再使用当前文档的 URL,而使用指定的基本 URL 来解析所有的相对 URL。这其中包括 <a>、<img>、<link>、<form> 标签中的 URL。
浏览器也会在当前页面URL的基础上对..和.进行相应调整,在地址栏生成新的请求URL。