點擊頁面中的鏈接,瀏覽器會根據源碼中相對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。