URL有兩種方式:絕對的和相對的. 絕對URL中包含有訪問資源的所需的全部信息
舉一個例子:
<HTML> <HEAD><TITLE>Joe's Tools</TITLE></HEAD> <BODY> <H1>Tools Page</H1> <H2>Hammers</H2> <p>Joe's Hardware online has the largest selection of <A HREF="./hammers.html"> hammers </A> on earth </p> </BODY> </HTML>
其中,基礎URL為:http://www.joes-hardware.com/tools.html
資源./hammers.html即相對的URL,它被解析為:基礎URL+相對URL(后面有講具體的解析規則),
即http://www.joes-hardware.com/hammers.html
基礎URL
轉換處理的第一步就是找到基礎URL. 基礎URL是相對論URL的參考點. 基礎URL可以來自以下幾個不同的地方
-
在資源中顯式提供
有些資源會顯式指定基礎課URL, 如, html中可以用標記<BASE>, 通過它來轉換那個HTML文檔中的所有相對URL
-
封閉資源的基礎URL
如果在一個沒有顯式指定基礎URL的資源中發現一個相對URL, 可以將它所屬的資源的URL作為基礎
-
沒有基礎URL
如果沒有基礎的URL, 這通常意味着你有一個絕對的URL,但有時可能只是一個不完整或損壞的URL
解析相對引用
要將一個相對URL轉換為絕對URL,要將其先划分為一個個組件. 把URL划分為組件后,就可以用以下的算法完成轉換了(圖處來自《HTTP權威指南》)

我們對上面的./hammers.html使用圖中描述的算法
- 路徑為./hammers.html, 基礎URL為http://www.joes-hardware.com/tools.html
- 方案(scheme)為空,沿着圖左邊處理,繼承基礎URL方案
- 至少一個組件非空,一直處理到底端,繼承主機和端口組件
- 將來自相對URL(路徑:./harmers.html)的組件與繼承的組件合並,得到新的絕對URL:http://ww.joes-hardware.com/hammers.html
