點擊頁面中的鏈接,瀏覽器會根據源碼中相對URL路徑作不同的處理: (1)有協議名稱,但沒有功能變數名稱信息 對於這種形式的URL,它的協議,路徑,查詢字元串和片段ID都以它自身為準,但功能變數名稱信息的部分,以引用它的那個頁面地址為準。 (2)沒有協議名,但有功能變數名稱信息 協議名稱由原發起頁面確定,而所有接下來的URL ...
點擊頁面中的鏈接,瀏覽器會根據源碼中相對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。