URIs, URLs, and URNs

首先,URI,是uniform resource identifier,統一資源標識符,用來惟一的標識一個資源。而URL是uniform resource locator,統一資源定位器,它是一種具體的URI,即URL能夠用來標識一個資源,並且還指明瞭如何locate這個資源。而URN,uniform resource name,統一資源命名,是經過名字來標識資源,好比mailto:java-net@java.sun.com。也就是說,URI是以一種抽象的,高層次概念定義統一資源標識,而URL和URN則是具體的資源標識的方式。URL和URN都是一種URI。html

在Java的URI中,一個URI實例能夠表明絕對的,也能夠是相對的,只要它符合URI的語法規則。而URL類則不只符合語義,還包含了定位該資源的信息,所以它不能是相對的,schema必須被指定.java

第二個,從HttpServletRequest的javadoc中能夠看出,getRequestURI返回一個String,「the part of this request’s URL from the protocol name up to the query string in the first line of the HTTP request」,好比「POST /some/path.html?a=b HTTP/1.1」,則返回的值爲」/some/path.html」。如今能夠明白爲何是getRequestURI而不是getRequestURL了,由於此處返回的是相對的路徑。而getRequestURL返回一個StringBuffer,「The returned URL contains a protocol, server name, port number, and server path, but it does not include query string parameters.」,完整的請求資源路徑,不包括querystring。服務器

總結一下:URL是一種具體的URI,它不只惟一標識資源,並且還提供了定位該資源的信息。URI是一種語義上的抽象概念,能夠是絕對的,也能夠是相對的,而URL則必須提供足夠的信息來定位,因此,是絕對的,而一般說的relative URL,則是針對另外一個absolute URL,本質上仍是絕對的。ide

URI 是從虛擬根路徑開始的
URL是整個連接
URL http://zhidao.baidu.com/question/68016373.html
URI 是/question/68016373.html
在baidu那邊服務器上把http://zhidao.baidu.com/製做成了虛擬的路徑的根
相關文章
相關標籤/搜索