全部的東西都有一個標準化的東西,公交有線路號,飛機有航班號,我的有身份證號,你坐出租車,告訴司機師傅我要到石牌華師,他就能明白你的意思了。URL就是因特網資源的標準化名稱。URL指向一條電子信息片斷,告訴你它們位於何處,以及如何與他們進行交互。html
統一資源標識符(Uniform Resource Identifier,URI)是一類更通用的資源標識符,它包括URL和URN。URL是經過描述資源的位置來標識資源的,而URN是經過名字來識別資源的,與它們當前所處的位置無關。算法
咱們普通時候遇到的大部分的URL(好比」http://soccer.hupu.com/germany「)是由三部分組成的:方案(http)、主機(soccer.hupu.com)、路徑(/germany)。URL的語法隨方案的不一樣而有所不一樣!大多數URL方案的URL語法都創建在由9部分構成的通用格式上:數組
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
不過幾乎沒有哪一個URL包含全部這些組件。瀏覽器
首先咱們來看看什麼叫方案。安全
方案其實是規定如何訪問指定資源的主要標識符,它會告訴負責解析URL的應用程序應該使用什麼協議。咱們最經常使用的http(目前大部分瀏覽器都會幫你省略掉這個部分)、https(http的安全版)、ftp等等。服務器
方案名是不區分大小寫的,也就是說」http://www.google.com「和」HTTP:www.google.com「是等價的(你能夠去你的瀏覽器裏去試一下)。併發
咱們要訪問因特網上的資源,要知道是哪臺機器裝載了該資源,以及在該機器的什麼位置能夠找到該資源,這就是URL內主機與端口提供的信息。咱們能夠用主機名(www.hupu.com)或者IP地址(112.90.32.241)來表示主機名。端口組件標識了服務器正在監聽的端口,http的默認端口爲80,https的默認端口爲443。less
用戶和密碼組件一般出如今ftp協議中。網站
ftp://ftp.prep.ai.mit.edu/pub/gnu這個例子中沒有用戶和密碼組件。當URL方案要求輸入用戶名和密碼時,它會插入anonymous做爲你的用戶名,併發送一個默認密碼。google
ftp://anonymous@ftp.prep.ai.mit..edu/pug...該例子中顯示了一個指定的用戶名anonymous。字符@講用戶和密碼組件與URL的其餘部分分隔開來。
ftp://anonymous:my_password@ftp.prep.ai....指定了用戶名和密碼,由」:」分。
就像PC中文件路徑同樣。每一個路徑都有本身的參數。
URL中的參數組件是名值對列表,由字符」;」將其與URL的其餘部分分隔開來。它們爲應用程序提供了訪問資源所須要的附加信息。ftp://ftp.prep.ai.mit.edu/pub/gnu;type=d
能看出上述例子中的參數名是什麼,參數的值是什麼嗎?
咱們用一個例子來講明http://bbs:scoccer.com/15630262.html?ite...。這個例子中?右邊的內容就是查詢組件。咱們經過查詢組件來縮小所請求資源的範圍。
咱們通常用「名/值」的方式來查詢,名值對之間用&分隔:http://bbs:scoccer.com/15630262.html?ite...。
URL支持用片斷組件來表示一個資源內部的片斷,如HTML文檔中一個特定的圖片和小節。好比:
http://bbs:scoccer.com/15630262.html#rob...
*HTTP服務器處理整個對象,而不是對象的片斷,從服務器返回的是整個資源後,由客戶端的瀏覽器來顯示你感興趣的片斷。
URL有兩種方式:絕對的和相對的。咱們通常見到的都是絕對URL。而相對URL是URL的一種便捷縮略記法,是URL的片斷或者一小部分。有過開發經驗的應該也都見過。咱們來看一下一個HTML文檔
<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 the earth.</P> <H2><A NAME=drills></A>Drills</H2> <P>Joe's Hardware has a complete line of cordless and corded drills, as well as the latest in plutonium-powered atomic drills, for those big around the house jobs.</P> ... </BODY> </HTML>
其中 ./hammers.html就是一個相對路徑。
既然說是相對路徑,那它確定有個相對的對象。這個對象就是所謂的基礎URL。這個例子中,基礎URL是http://www.joes-hardware.com/tools.com。那麼基礎URL是怎麼來的呢。
一、在資源中顯示提供。好比HTML文檔中可能會包含一個定義了基礎URL的標記<BASE>
二、封裝資源的基礎URL。若是沒有顯式指定基礎URL,能夠將它所屬資源的URL做爲基礎。
三、沒有基礎URL。一般意味這是一個絕對URL,固然也有可能這個URL是不完整的。
那麼咱們如何將一個相對的URL轉換爲絕對的URL呢?咱們看下面這個圖。
咱們對./hanmmers.html使用圖中的算法。
1)路徑爲./hammmers.html,基礎URL爲http://www.joes-hardware.com/tools.html
2)方案爲空,繼承基礎URL的方案(HTTP)
3)組件爲空,繼承主機和端口組件
4)將相對URL和繼承的組件合併:http://www.joes-hardware.com/hammmers.ht...。
《HTTP權威指南》中說咱們在地址欄中輸入yahoo,就會自動在主機名中插入www.和.com,不過目前我尚未找到對應的例子
這個咱們平常中用的不少了,經過咱們訪問過的網站,瀏覽器會自動幫咱們提供一些完整的選項供咱們選擇。
咱們已經知道URL提供的是咱們所需資源所處的位置,它的缺點是,一旦該資源被移走,咱們就不能經過URL對該資源進行定位了。咱們解決方案正式前面提到的URN。
URN(uniform resource name)統一資源名。其思想是在資源搜索的過程當中引入另一箇中間層,經過一箇中間資源定位符,服務器對資源的實際URL進行登記和跟蹤,這樣無論咱們的資源被移動到了何處,只要它沒有被刪除,定位符就能夠以這個資源重定向到所請求資源的實際URL中去。不過想要取代URL還須要必定的時間,這也不是Web開發中的緊迫問題。