HTTP之URL的組成部分


HTTP——URL的組成部分

 

#################文章全部摘自《HTTP權威指南》###########################

主要是為記錄自己學習HTTP的過程!

URL組成部分:方案://主機:端口號/路徑名:參數?查詢組件#片段

 

1、  方案

方案實際上是規定如何訪問指定資源的主要標識符,它會告訴負責解析URL的應用程序應該使用什么協議。

       方案組件必須以一個字母符號開始,由第一個“:”符號將其與URL的其余部分分割開來。方案名是大小寫無關的。

 

2、  主機與端口號

要想在因特網上找到資源,應用程序要知道是哪台機器轉載了資源,以及在那台計算機上什么地方可以找到能對目標資源進行訪問的的服務器。URL的主機和端口組件提供了這兩組信息。

主機組件標識了因特網上能夠訪問資源的的宿主機器。可以用主機名或IP地址來表示主機名。

端口組件標識了服務器正在監聽的網絡端口。是下層使用的TCP協議的HTTP來說,默認端口為80。

 

3、用戶名和密碼

更有趣的組件是用戶和密碼組件。很多服務器都要輸入用戶名和密碼才會允許用戶訪問資源。FTP服務器就是這樣一個常見的例子:
ftp://ftp.prep.ai.mit.edu/pub/gnu

ftp://anonymous@ftp.prep.ai.mit.edu/pub/gnu

ftp://anonymous:passwd@ftp.prep.ai.mit.edu/pub/gnu

http://joe:password@www.joes-hardware.com/sales_info.txt

第一個例子沒有用戶或密碼組件,只有標准的方案、主機和路徑。如果某應用程序使用的URL方案要求輸入用戶名和密碼,比如FTP,當用戶沒有提供,它通常會插入一個默認的用戶名和密碼。比如如果向瀏覽器提供一個FTP URL,當沒有指定用戶名和密碼,它就會插入anonymous(匿名用戶)作為你的用戶名,並發送一個默認的密碼(Internet Explorer會發送IEuser,Netcape Navigator則會發送mozila)

第二個例子顯示了一個指定為anonymous的用戶名。這個用戶名和主機組件組合在一起,看起來像Email地址一樣。字符“@”將用戶和密碼組件與URL的其余部分分隔開來。

在第三個例子中,指定了用戶名和密碼,兩者之間使用“:”分隔。

 

4、路徑

URL的路徑組件說明了資源位於服務器的什么地方。路徑通常很像一個分級的文件系統路徑。比如http://www.joes-hardware.com:80/seasonal/index-fall.html

這個URL中的路徑/seasonal/index-fall.html,很像Unix文件系統中的文件系統路徑。路徑是服務器定位資源是所需的信息。可以用字符“/”將HTTP URL的路徑組件划分為一些路徑段(path segment)(還是與UNIX文件系統中的文件路徑類似),每個路徑段都有自己的參數(param)組件。

5、參數

對很多方案來說,只有簡單的主機名和到達對象的路徑是不夠的。除了服務器正在監聽的端口,以及是否能夠通過用戶名和密碼訪問資源外,很多協議都還需要更多的信息才能工作。

負責解析URL的應用程序需要這些協議參數來訪問資源。否則,另一端的服務器可能就不會為請求提供服務,或者更糟糕的是,提供錯誤的服務器。比如,像FTP這樣的協議,有兩種傳輸模式,二進制和文本形式。你肯定不希望以文本形式來傳送二進制圖片,這樣的話,二進制圖片可能會變得一團糟。

為了向應用程序提供它們說需要的輸入參數,以便正確地與服務器進行交互,URL中有一個參數組件,這個組件就是URL中的名值對列表,由字符“;”將其與URL的其余信息(以及各名值對)分隔開來。它們為應用程序提供了訪問資源所需的所有附加信息。比如:

ftp://prep.ai.mit.edu/pub/gnu;type=d

在這個例子中,有一個參數type=d,參數名為type,值為d。

如前所述,HTTP URL的路徑組件可以分為若干路徑段。每段都可以有自己的參數。比如:

http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true

這個例子就有兩個路徑段hammers和index.html。hammers路徑段的有參數sale,其值為false。index.html段有參數graphics,其值為ture。

 

6、查詢字符串

很多資源,比如數據庫服務,都是可以通過提問題或進行查詢來縮小所請求資源類型范圍的。假設Joe的五金商店在數據庫中維護着一個未售貨物的清單,並可以對清單進行查詢,以判斷產品是否有貨,那就可以用下列URL來查詢web數據庫網關,看看編號為12731的條目是否有貨:

http://www.joes-hardware.com/inventory-check?ietm=12731

這個URL的大部分都與我們見過的的其他URL類似。只有問好“?”右邊的內容是新出現的。這部分被稱為查詢(query)組件。URL的查詢組件和標識網關資源的URL路徑組件一起被發送給網關資源。基本上可以將網關當做訪問其他應用程序的訪問點。

圖2-2中有一個作為Joe的五金商店清單查詢應用程序的網關的服務器,在這個例子中向此服務器發送了一個查詢組件。查詢的目的是檢查清單中是否有尺寸為large、顏色為blue的條目12731。

7、片段

有些資源類型,比如HTML,除了資源級之外,還可以做進一步的划分。比如對一個帶有章節的大型文本文檔來說,資源的URL會指向整個文本文檔,但理想的情況是,能夠指定資源中的那些章節。

為了引用部分資源或資源的一個片段,URL支持使用片段(frag)組件來表示一個資源內部的片段。比如:URL可以指向HTML文檔中一個特定的圖片或小節。

片段掛在URL的的右手邊,最前面有一個字符“#”。比如:

http://www.joes-hardware.com/tools.html#drills

在上述的例子中,片段drills引用了Joe的五金商店Web服務器上頁面/tools.html中的一個部分。這部分的名字叫做drills。

HTTP服務器通常只處理整個對象,而不是對象的片段,客戶端不能將片段傳送給服務器(見下圖)瀏覽器從服務器獲得了整個資源之后,會根據片段來顯示你感興趣的的那部分資源。如下圖所示

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM