因特網(wǎng)上的可用資源可以用簡(jiǎn)單字符串來(lái)表示,該文檔就是描述了這種字符串的語(yǔ)法和語(yǔ)義。而這些字符串則被稱(chēng)為:“統(tǒng)一資源定位器”(URL)。這篇說(shuō)明源于萬(wàn)維網(wǎng)全球信息主動(dòng)組織(World Wide Web global informationinitiative)介紹的概念。RFC1630《通用資源標(biāo)志符》描述了一些對(duì)象數(shù)據(jù),他們自1990年起就開(kāi)始使用這些對(duì)象數(shù)據(jù)。這篇URL說(shuō)明符合《因特網(wǎng)資源定位符的功能需求(Functional Requirements for Internet Resource Locators)》中說(shuō)明的需求。這篇文檔是由工程任務(wù)組織(IETF)的URI工作小組寫(xiě)的 [1] 。
正如訪問(wèn)資源的方法有很多種一樣,對(duì)資源進(jìn)行定位的方案也有好幾種。URL的一般語(yǔ)法只是為使用協(xié)議來(lái)建立新方案提供了一個(gè)框架,當(dāng)然除了已經(jīng)在這篇文檔中定義過(guò)的。URL通過(guò)提供資源位置的一種抽象標(biāo)志符來(lái)對(duì)資源進(jìn)行定位。系統(tǒng)定位了一個(gè)資源后,可能會(huì)對(duì)它進(jìn)行各種各樣的操作,這些操作可以抽象為下面的幾個(gè)詞:訪問(wèn),更新,替換,發(fā)現(xiàn)屬性。一般來(lái)說(shuō),只有訪問(wèn)方法這一項(xiàng)在任何URL方案中都需要進(jìn)行描述。
一個(gè)URL包含了它使用的方案名稱(chēng)(<方案>), 其后緊跟一個(gè)冒號(hào),然后是一個(gè)字符串(<方案描述部分>),這部分的解釋由所使用的方案來(lái)決定。方案名稱(chēng)由一串字符組成。小寫(xiě)字母“a”——“z”,數(shù)字,字符加號(hào)(“+”),句點(diǎn)(“.”)和連字號(hào)(“-”)都可以。為了方便起見(jiàn),程序在解釋URL的時(shí)候應(yīng)該視方案名稱(chēng)中的大寫(xiě)字母和小寫(xiě)字母一樣。(例如:視“HTTP”和“http”一樣)。
URL是由一串字符組成,這些字符可以是字母,數(shù)字和特殊符號(hào)。一個(gè)URL可以用多種方法來(lái)表現(xiàn),例如:紙上的字跡,或者是用字符集編碼的八位字節(jié)序列。URL的解釋僅取決于所用字符的特性。在大多數(shù)URL方案中,都是使用URL不同部分的字符序列來(lái)代表因特網(wǎng)協(xié)議中所使用的八位字節(jié)序列。例如,在ftp方案中主機(jī)名,目錄名和文件名就是這樣的八位字節(jié)序列,它們用URL的不同部分代表。在這些部分里,一個(gè)八位字節(jié)數(shù)可以用這樣的字符來(lái)表示:該字符在US—ASCII[20]編碼字符集中的編碼是這個(gè)八位字節(jié)數(shù)。另外,八位字節(jié)數(shù)可以被編成如下形式的代碼:“%”后加兩個(gè)十六進(jìn)制數(shù)字(來(lái)自于“0123456789ABCDEF”),這兩個(gè)十六進(jìn)制數(shù)字代表了這八位字節(jié)數(shù)的值。(字符“abcdef”也可以用于十六進(jìn)制編碼)。如果存在下面的情況:八位字節(jié)數(shù)在US-ASCII字符集中沒(méi)有相應(yīng)的可顯示字符,或者使用相應(yīng)字符會(huì)產(chǎn)生不安全因素,或者相應(yīng)的字符被保留用于特定的URL方案的解釋?zhuān)敲此鼈儽仨毐痪幊纱a。
URL有時(shí)候被用來(lái)定位那些包含指示器的資源,而這些指示器又指向其他資源。有時(shí)候這些指示器用關(guān)系鏈接表示,在關(guān)系鏈接中第二資源的位置表示符原則上“和那些除了帶有次相關(guān)路徑的表示符相同”。在這篇文檔中沒(méi)有對(duì)關(guān)系鏈接進(jìn)行描述。但是,關(guān)系鏈接的使用依賴(lài)于包含分層結(jié)構(gòu)的原始URL,它是關(guān)系鏈接的基礎(chǔ)。有些URL方案(例如ftp,http,和文件方案)包含的名字可以被認(rèn)為是分層次的;這些層次之間用“/”分隔。
一些已經(jīng)存在的標(biāo)準(zhǔn)協(xié)議和正處于試驗(yàn)中的協(xié)議之間的映射關(guān)系的輪廓用BNF語(yǔ)法定義進(jìn)行描述。下面對(duì)一些協(xié)議進(jìn)行了注釋?zhuān)?/div>
-
ftp File Transfer protocol(文件傳輸協(xié)議)
-
http Hypertext Transfer Protocol(超文本傳輸協(xié)議)
-
gopher The Gopher protocol(Gopher協(xié)議)
-
mailto Electronic mail address(電子郵件地址)
-
news USENET news(USENET新聞)
-
nntp USENET news using NNTP access(使用NNTP訪問(wèn)的USENET新聞)
-
telnet Reference to interactive sessions(交互式會(huì)話訪問(wèn))
-
wais Wide Area Information Servers(廣域信息服務(wù)系統(tǒng))
-
file Host-specific file names(特殊主機(jī)文件名)
-
prospero Prospero Directory Service(prospero目錄服務(wù))
在以后的說(shuō)明書(shū)中可能會(huì)對(duì)其他一些方案加以描述。這篇文檔的第四部分介紹了如何注冊(cè)新的方案,并且列出了一些正在研究中的方案名。
通用方案語(yǔ)法
雖然URL其他部分的語(yǔ)法因方案的不同而不同,但那些直接使用基于IP的協(xié)議來(lái)定位因特網(wǎng)上的主機(jī)的URL方案都使用了如下形式的通用語(yǔ)法來(lái)表示特定的方案數(shù)據(jù):
//<用戶(hù)名>:<密碼>@<主機(jī)>:<端口>/<url路徑>
可能會(huì)省略“<用戶(hù)名>:<密碼>@”,“ :<密碼>”,“ :<端口>”,和“/<url路徑>”這些部分的某些或者全部。這些方案的特定數(shù)據(jù)以雙斜線“//”開(kāi)頭來(lái)表明它遵從通用因特網(wǎng)方案語(yǔ)法。各個(gè)部分分別遵守如下規(guī)則:
用戶(hù)名(和密碼)如果存在的話,其后緊跟一個(gè)商用符號(hào)“@”。在用戶(hù)名和密碼字段中出現(xiàn)的任何“:”,“@”或者“/”都要進(jìn)行編碼。注意空的用戶(hù)名或者密碼不同于沒(méi)有用戶(hù)名和密碼;決不能在沒(méi)有指定用戶(hù)名的情況下指定密碼。例如:<URL:ftp://@host.com/>的用戶(hù)名為空并且沒(méi)有密碼,<URL:ftp://host.com/>沒(méi)有用戶(hù)名,而<URL:ftp://foo:@host.com/>的用戶(hù)名是“foo”并且密碼為空。
-
主機(jī):網(wǎng)絡(luò)主機(jī)的域名,或者它的以“.”分隔的四組十進(jìn)制數(shù)字集合形式的IP地址。域名的形式在RFC1034[13]的3.5節(jié)和RFC1123[5]的2.1節(jié)中進(jìn)行了描述,即用“.”分隔的域標(biāo)志串,域標(biāo)志以字母或者數(shù)字開(kāi)頭和結(jié)束,也可能包含“-”字符。最右邊的域標(biāo)志不能以數(shù)字開(kāi)頭,這樣就在語(yǔ)法結(jié)構(gòu)上將域名和IP地址區(qū)分開(kāi)來(lái)了。
-
端口:指明鏈接的端口。大部分方案都給協(xié)議指定一個(gè)默認(rèn)的端口。也可以隨意指定一個(gè)十進(jìn)制形式的端口,并用冒號(hào)與主機(jī)隔開(kāi)。如果忽略端口,那么這個(gè)冒號(hào)也要忽略。
-
url路徑:定位符的其他部分由方案的特殊數(shù)據(jù)組成,這些特殊數(shù)據(jù)被稱(chēng)為“url-路徑”。它提供了如何對(duì)特定資源進(jìn)行訪問(wèn)的詳細(xì)信息。注意主機(jī)(或端口)與url-路徑間的“/”不是url-路徑的一部分。url-路徑的語(yǔ)法依賴(lài)于所使用的方案。也依賴(lài)于它在方案中的解釋方法。
FTP
FTP URL方案可以用來(lái)指定因特網(wǎng)上使用FTP協(xié)議(RFC959)的可達(dá)主機(jī)上的文件和目錄。FTP URL遵從3.1節(jié)所描述的語(yǔ)法。如果:<端口>被省略的話,則使用缺省端口21。
1、FTP 用戶(hù)名和密碼
在連接上FTP服務(wù)器后,可以用“USER”和“PASS”命令來(lái)指定用戶(hù)名和密碼。如果沒(méi)有提供用戶(hù)名或者密碼并且FTP服務(wù)器只要求一項(xiàng),那么將使用到“匿名”服務(wù)器的轉(zhuǎn)換,如下所示:用戶(hù)名“anonymous”被發(fā)送。訪問(wèn)資源的終端用戶(hù)的因特網(wǎng)電子郵件地址被作為密碼發(fā)送。如果URL提供用戶(hù)名但不提供密碼,那么遠(yuǎn)程服務(wù)器將要求提供密碼,而解釋FTP URL的程序則要求用戶(hù)輸入密碼。
2、FTP URL-路徑FTP URL的URL-路徑語(yǔ)法如下:
<cwd1>/<cwd2>/.../<cwdN>/<name>;type=<typecode>
這里的<cwd1>到<cwdN>和<name>(可能被編碼)都是字符串,<typecode>是字符“a”,“i”和“d”之一。“;type=<typecode>”這一部分可以被省略。<cwdx>和<name>部分可以為空。整個(gè)url-路徑,包括它和包含用戶(hù)名,密碼,主機(jī)及端口的前綴間的分界符“/”都可以被省略。url-路徑可以被解釋成如下的一串FTP命令:每個(gè)<cwd>元素被作為CWD(改變工作目錄)命令的參數(shù)發(fā)送。如果類(lèi)型編碼是“d”,則執(zhí)行一個(gè)以<name>作為參數(shù)的NTLS(名字列表)命令,并把結(jié)果解釋為一個(gè)文件目錄列表。否則,執(zhí)行一個(gè)用<typecode>作為參數(shù)的TYPE命令,然后訪問(wèn)文件名為<name>的文件(例如,使用RETR命令)。name或者CWD部分的字符“/”和“;”都是保留字符,必須進(jìn)行編碼。在FTP協(xié)議中,這些部分在使用前被解碼。特別的是,如果訪問(wèn)一個(gè)特定文件的適當(dāng)FTP命令序列需要發(fā)送一個(gè)包含“/”的字符串作為CWD或者RETR命令的參數(shù),那么必須對(duì)每個(gè)“/”都進(jìn)行編碼。例如,URL<URL:ftp://myname@host.dom/%2Fetc/motd>被FTP解釋為“host.dom”,并以用戶(hù)名“myname”登錄(如果需要,則提示輸入密碼),然后執(zhí)行“CWD /etc”,再接著執(zhí)行“RETR motd”。這和<URL:ftp://myname @host.dom/etc/motd>的含義不一樣,它先執(zhí)行“CWD etc”然后執(zhí)行“RETR motd”;開(kāi)始的“CWD”可能被執(zhí)行,進(jìn)入用戶(hù)“myname”的缺省目錄。另一方面,<URL:ftp://myname@host.dom//etc/motd>將執(zhí)行一個(gè)不帶參數(shù)的“CW D”命令,然后執(zhí)行“CWD etc”,接著執(zhí)行“RETR moth”。FTP URL也可以用于其他操作;例如,可以更新遠(yuǎn)程文件服務(wù)器上的文件,或者根據(jù)它的目錄列表來(lái)推斷它的一些信息。完成這些功能的機(jī)制在這兒沒(méi)有仔細(xì)介紹。
3、 FTP 類(lèi)型編碼是可選擇的
FTP URL的整個(gè);type=<typecode>部分都是可選擇的。如果這一部分被省略,那么解釋URL的客戶(hù)程序必須猜測(cè)適當(dāng)模式來(lái)使用。一般來(lái)說(shuō),文件數(shù)據(jù)內(nèi)容的類(lèi)型只能從文件名來(lái)猜測(cè),例如根據(jù)文件名后綴猜測(cè);用來(lái)傳輸文件的合適的類(lèi)型編碼于是可以從文件的數(shù)據(jù)內(nèi)容推斷出來(lái)。
4、層次
在有些文件系統(tǒng)中,用來(lái)表示URL的層次結(jié)構(gòu)的“/”與用來(lái)構(gòu)建文件系統(tǒng)層次的分隔符相同,這樣一來(lái),文件名和URL路徑看起來(lái)就很像。但這并不意味著URL是一個(gè)Unix文件名。
5、優(yōu)化
客戶(hù)端通過(guò)FTP對(duì)資源進(jìn)行訪問(wèn)時(shí)可能會(huì)使用一些額外的搜索方法來(lái)優(yōu)化交互過(guò)程。例如,對(duì)一些FTP服務(wù)器來(lái)說(shuō),當(dāng)訪問(wèn)同一個(gè)服務(wù)器的多個(gè)URL的時(shí)候,則保持控制連接一直打開(kāi)是比較合理的。但FTP協(xié)議沒(méi)有通用的層次模式,因此當(dāng)一個(gè)改變目錄的命令發(fā)出后,如果是一個(gè)不同的路徑,那么一般不可能推斷出下一次將要給另一個(gè)目錄發(fā)送什么樣的序列。唯一可靠的算法是斷開(kāi)然后重新建立控制連接。
HTTP
HTTP URL 方案是用來(lái)標(biāo)志因特網(wǎng)上使用HTTP(HyperText Transfer Protocol,超文本傳輸協(xié)議)的可達(dá)資源。HTTP協(xié)議在其他的地方進(jìn)行了詳細(xì)說(shuō)明。本文只介紹了HTTP URL的語(yǔ)法。HTTP URL的形式如下:
http://<host>:<port>/<path>?<searchpart>
其中<host>和<port>已經(jīng)在3.1節(jié)說(shuō)明過(guò)了。如果:<port>部分省略,那么就使用缺省的端口80。不需要用戶(hù)名和密碼。<path>是一個(gè)HTTP選擇器,<searchpart>是查詢(xún)字符串。<path>,<searchpart>和它前面的“?”都是可選擇的。如果<path>和<searchpart>部分都沒(méi)有,則“/”也可以省略。<path>和<searchpart>部分中的“/”,“;”和 “?”都是保留字符。“/”字符可以在HTTP中用來(lái)表示層次結(jié)構(gòu)。
GOPHER
Gopher URL方案用來(lái)標(biāo)志因特網(wǎng)上使用Gopher協(xié)議的可達(dá)資源。基本Gopher協(xié)議是在RFC1436中介紹的,它支持項(xiàng)和項(xiàng)(目錄)集合。Gopher+ 協(xié)議則在基本Gopher協(xié)議的基礎(chǔ)上進(jìn)行了擴(kuò)展,并且向上兼容。中對(duì)它進(jìn)行了介紹。Gopher+支持聯(lián)合屬性的任意集合和使用Gopher項(xiàng)的替換數(shù)據(jù)表示。Gopher URL提供了Gopher與Gopher+的項(xiàng)和項(xiàng)屬性。
1、Gopher URL 語(yǔ)法
Gopher URL的形式如下:
gopher://<host>:<port>/<gopher-path>
這里的<gopher-path>是<gophertype><selector><gophertype><selector>%09<search><gophertype><selector>%09<search>%09<gopher+_string>之一。
如果:<port>被省略,那么使用缺省端口70。<gophertype>是一個(gè)單字符域,它表示URL引用的資源的Gopher類(lèi)型。<gopher-path>部分也可以整個(gè)為空。在這種情況下,分隔符“/”也是可選擇的,并且<gophertype>的缺省值是“1”。<selector>是Gopher選擇器字符串。在Gopher協(xié)議中,Gopher 選擇器字符串一個(gè)八位字節(jié)串,它包括除了十六進(jìn)制的09(US-ASCII HT 或tab),0A(US-ASCII 字符 LF)和0D(US-ASCII 字符CR)外的所有八位字節(jié)。Gopher客戶(hù)通過(guò)向Gopher服務(wù)器發(fā)送Gopher選擇器字符串來(lái)指定要獲得的項(xiàng)。<gopher-path>中沒(méi)有保留字符。需要注意的是:有些Gopher<selector>字符串是以<gophertype>字符的一個(gè)拷貝來(lái)開(kāi)頭,在這種情況下,這個(gè)字符將會(huì)連續(xù)出現(xiàn)兩次。Gopher選擇器可能是空字符串;Gopher客戶(hù)端就是這樣來(lái)查詢(xún)Gopher服務(wù)器的高層目錄的。
2、為Gopher搜索引擎指定URL
如果URL被提交到Gopher搜索引擎進(jìn)行查詢(xún),那么選擇器后將緊跟一個(gè)已編碼的tab(%09)和一個(gè)搜索字符串。Gopher客戶(hù)為了向Gopher搜索服務(wù)器提交一個(gè)搜索必須向Gopher服務(wù)器發(fā)送<selector>字符串(編碼后),一個(gè)tab字符,和一個(gè)搜索字符串。
3、Gopher+項(xiàng)的URL語(yǔ)法
Gopher+項(xiàng)的URL有一個(gè)已編碼的tab字符(%09)和一個(gè)Gopher+字符串。注意盡管<search>元素可以是空字符串,但在這種情況下必須提供%09<search>字符串。<gopher+_string>被用來(lái)表示取得Gopher+項(xiàng)所需要的信息。Gopher+項(xiàng)可以擁有交替視圖,任意的屬性系,也可以有與它們相關(guān)聯(lián)的電子表格。客戶(hù)為了獲得與Gopher+URL相關(guān)聯(lián)的數(shù)據(jù),必須連接到服務(wù)器并且發(fā)送Gopher選擇器,這個(gè)選擇器的后面緊跟一個(gè)tab字符和搜索字符串(可以為空)然后是一個(gè)tab字符和Gopher+命令。
4 、缺省的Gopher+數(shù)據(jù)表示
當(dāng)一個(gè)Gopher服務(wù)器向客戶(hù)返回目錄列表時(shí),Gopher+項(xiàng)后面跟著一個(gè)“+”(表示Gopher+項(xiàng))或者一個(gè)“?”(表示具有與它們相關(guān)聯(lián)的+ASK形式的Gopher+項(xiàng))。Gopher+字符串只有一個(gè)字符“+”的Gopher URL采用項(xiàng)的缺省的視圖(數(shù)據(jù)表示),而Gopher+字符串只有一個(gè)字符“?”的Gopher URL則采用具有相關(guān)聯(lián)的Gopher電子表格的項(xiàng)。
5 、具有電子表格的Gopher+項(xiàng)
具有與之相關(guān)聯(lián)的+ASK的Gopher+項(xiàng)(也就是跟著一個(gè)“?”的Gopher+項(xiàng))要求客戶(hù)端取得該項(xiàng)的+ASK屬性來(lái)獲得表格定義,然后讓用戶(hù)填寫(xiě)這個(gè)表格并將用戶(hù)應(yīng)答和獲得項(xiàng)的選擇器字符串一起返回。Gopher+客戶(hù)端知道如何完成這些工作,但需要依賴(lài)于Gopher+項(xiàng)描述中的“?”標(biāo)簽來(lái)知道什么時(shí)候處理這種情況。Gopher+項(xiàng)中的“?”被用來(lái)與Gopher+協(xié)議中這種符號(hào)的用法相兼容。
6 、Gopher+項(xiàng)屬性集
為了表示項(xiàng)的Gopher+屬性,Gopher URL的Gopher+字符串由“!”或者“$”組成。“!”涉及Gopher+項(xiàng)的所有屬性。“$”則涉及Gopher目錄中所有項(xiàng)的所有項(xiàng)屬性。
7、涉及特定的Gopher+屬性
為了表示特殊的屬性,URL的gopher+_string是“!<attribute_name>”或者“$<attribute_name>”。例如,gopher+_string的值為“!+ABSTRACT” 表示屬性包含一個(gè)項(xiàng)的抽象。為了表示幾個(gè)屬性,gopher+_string可以由幾個(gè)屬性名組成,并且用已編碼的空格分隔開(kāi)。例如,“!+ABSTRACT%20+SMELL”代表一個(gè)項(xiàng)的+ABSTRACT和+SMELL屬性。
8、Gopher+交替視圖的URL語(yǔ)法
Gopher+允許項(xiàng)有優(yōu)化的交替數(shù)據(jù)表示(交替視圖)。Gopher+客戶(hù)端發(fā)送適當(dāng)?shù)囊晥D和語(yǔ)言標(biāo)志(出現(xiàn)在項(xiàng)的+VIEW屬性里)來(lái)獲得Gopher+的交替視圖。為了引用一個(gè)特定的Gopher+交替視圖試圖,URL的Gopher+字符串的形式必須如下所示:
+<視圖名稱(chēng)>%20<語(yǔ)言名稱(chēng)>
例如,Gopher+字符串"+application/postscript%20Es_ES"引用了一個(gè)Gopher+項(xiàng)的交替視圖的西班牙語(yǔ)附注。
9、 Gopher+電子表格的URL語(yǔ)法
一個(gè)引用了填充有特定數(shù)據(jù)的Gopher+電子表格(一個(gè)ASK塊)所參考的項(xiàng)的URL的Gopher+字符串是通過(guò)對(duì)客戶(hù)送給服務(wù)器的gopher+字符串進(jìn)行編碼得到的。這個(gè)gopher+字符串的形式如下所示:
+%091%0D%0A+-1%0D%0A<ask_item1_value>%0D%0A<ask_item2_value>%0D%0A.%0D%0A
Gopher客戶(hù)端為了獲得這個(gè)項(xiàng),它發(fā)送如下信息給Gopher服務(wù)器:
<a_gopher_selector><tab>+<tab>1<cr><lf>+-1<cr><lf><ask_item1_value><cr><lf> <ask_item2_value><cr><lf><cr><lf>
MAILTO
mailto URL方案是用來(lái)指明一個(gè)個(gè)體或者服務(wù)的因特網(wǎng)郵件地址的。它只代表因特網(wǎng)郵件地址,而不表示任何其它的附加信息。Mailto URL的形式如下所示:
mailto:<rfc822-addr-spec>
這里的<rfc822-addr-spec>是地址說(shuō)明(的編碼),這在RFC822[6]中進(jìn)行了詳細(xì)的說(shuō)明。在mailto URL中沒(méi)有保留字。注意百分符號(hào)("%")在RFC822中用得比較普遍,它必須被編碼。不像許多URL,mailto方案不代表可直接訪問(wèn)的數(shù)據(jù)對(duì)象;也沒(méi)有跡象表面它代表一個(gè)對(duì)象。它的使用方法不同于MIME中的報(bào)文/外部實(shí)體類(lèi)型。
NEWS
新聞URL方案被用來(lái)查閱新聞組或者USENET新聞上的獨(dú)立文章,這一點(diǎn)在RFC1036中詳細(xì)說(shuō)明了。新聞URL的形式是下面兩個(gè)之一:
news:<newsgroup-name>
news:<message-id>
<newsgroup-name>
是一個(gè)用句點(diǎn)分隔的層次名稱(chēng),例如:“comp.infosystems.www.misc”。<message-id>與RFC1036中的2.1.5節(jié)中的Message-ID一樣,只是后者沒(méi)有用“<”和“>”括起來(lái);它的形式如下<unique>@<full_domain_name>。消息標(biāo)志符通過(guò)代表“在(at)”的“@”字符和新聞組名稱(chēng)相區(qū)分。除此之外,在新聞URL組件中沒(méi)有其它的保留字符。如果<newsgroup-name>是“*”(例如:<URL:news:*>),那么它表示“所有可用的新聞組”。新聞URL是不同尋常的,因?yàn)樗鼈冏陨聿话銐虻男畔?lái)定位一個(gè)單一資源,但是它們的位置是任意的。
NNTP
(Network News Transfer Protocol,網(wǎng)絡(luò)新聞傳輸協(xié)議)URL方案是引用新聞文章的另一個(gè)方法,這個(gè)方案在用來(lái)從NNTP服務(wù)器指定新聞文章時(shí)是非常有用的(RFC977)。網(wǎng)絡(luò)新聞傳輸協(xié)議URL的形式如下:
nntp://<host>:<port>/<newsgroup-name>/<article-number>
這里的<host>和<port>在3.1節(jié)進(jìn)行了闡述。如果省略:<port>,那么端口缺省為119。<newsgroup-name>是組名,<article-number>是新聞組中文章的數(shù)字編號(hào)。注意nntp:URL指定了文章資源的一個(gè)唯一的位置,大多數(shù)因特網(wǎng)上的NNTP服務(wù)器目前進(jìn)行的配置只允許本地客戶(hù)端訪問(wèn),因此nntp URL并不代表全球可訪問(wèn)的資源。這樣URL的news:形式成為標(biāo)志新聞文章的首選方法。
TELNET
遠(yuǎn)程登錄URL方案被用來(lái)指明交互式服務(wù),這種服務(wù)可以通過(guò)Telnet協(xié)議來(lái)進(jìn)行訪問(wèn)。telnet URL的形式如下:
telnet://<user>:<password>@<host>:<port>/
向3.1節(jié)所講的那樣,最后面的“/”字符可以被省略。如果:<port>被省略,那么端口缺省為23。:<password>也可以被省略,<user>:<password>部分也可以整個(gè)被省略。這個(gè)URL并不指定一個(gè)數(shù)據(jù)對(duì)象,而是指定一個(gè)交互式的服務(wù)。遠(yuǎn)程交互式服務(wù)在允許遠(yuǎn)程登錄的方法上差別很大。實(shí)際上,提供的<user>和<password>僅供參考:正在訪問(wèn)一個(gè)telnet URL的客戶(hù)端僅僅建議所暗示的用戶(hù)名和密碼的用戶(hù)。
WAIS
(Wide Area Information Servers,廣域信息服務(wù)系統(tǒng))WAIS URL 方案用來(lái)指示W(wǎng)AIS數(shù)據(jù)庫(kù),搜索或者WAIS數(shù)據(jù)庫(kù)中可用的單個(gè)文檔。WAIS在中進(jìn)行了描述。RFC1625[17]對(duì)WAIS協(xié)議進(jìn)行了闡述。雖然WAIS協(xié)議是基于Z39.50-1988的,但 WAIS URL方案并不是特意用來(lái)和任意的Z39.50服務(wù)一起使用的。WAIS URL有如下幾個(gè)形式:
wais://<host>:<port>/<database>
wais://<host>:<port>/<database>?<search>
wais://<host>:<port>/<database>/<wtype>/<wpath>
這里的<host>和<port>在3.1節(jié)闡述過(guò)了。如果省略了:<port>,那么端口缺省為210。第一種形式指定了一個(gè)可以用來(lái)搜索的WAIS服務(wù)器。第二種形式表明了一個(gè)特定的搜索。<database>是被查詢(xún)的WAIS數(shù)據(jù)庫(kù)名。第三種形式表明了WAIS數(shù)據(jù)中的一個(gè)要獲取的特定文檔。在這種形式中<wtype>是對(duì)象類(lèi)型的WAIS表示。許多WAIS實(shí)現(xiàn)需要一個(gè)在取得信息之間就能夠認(rèn)識(shí)對(duì)象“類(lèi)型”的客戶(hù)端,這個(gè)類(lèi)型和搜索響應(yīng)中的內(nèi)部對(duì)象標(biāo)志符一起返回。<wtype>包含在URL中,這是為了讓客戶(hù)端能理解URL的足夠信息來(lái)取得文檔。WAIS URL的<wpath>由WAIS文檔標(biāo)志組成,這個(gè)文檔標(biāo)志使用了2.2節(jié)所敘述的方法進(jìn)行編碼。WAIS 文檔標(biāo)志在處理時(shí)應(yīng)該是不透明的;它僅可以被發(fā)布它的服務(wù)器分解。
FILES
文件URL方案被用來(lái)指定那些特定主機(jī)上的可訪問(wèn)的文件。這個(gè)方案和其它大多數(shù)方案不一樣,因?yàn)樗⒉槐硎疽粋€(gè)在因特網(wǎng)上普遍可訪問(wèn)的資源。文件URL的形式如下:
file://<host>/<path>
這里的<host>是系統(tǒng)域名的全稱(chēng),在這個(gè)系統(tǒng)中<path>是可訪問(wèn)的,它是形如<directory>/<directory> /.../<name>的層次目錄。例如,一個(gè)VMS文件:DISK$USER:[MY.NOTES]NOTE123456.TXT的形式如下:
<URL:file://vms.host.edu/disk$user/my/notes/note12345.txt>
有一種特殊情況,就是<host>可以是字符串“localhost”或者空字符串;它被解釋為解釋這個(gè)URL的主機(jī)。
文件URL方案是與眾不同的,因?yàn)樗恢付ㄒ粋€(gè)因特網(wǎng)協(xié)議或者訪問(wèn)這些文件的方法;這樣它在主機(jī)間網(wǎng)絡(luò)協(xié)議上的效用是有限的。
PROSPERO
Prospero URL方案是用來(lái)指定那些可以通過(guò)Prospero目錄服務(wù)訪問(wèn)的資源。Prospero協(xié)議在其它地方介紹了。Prospero URL的形式如下:
prospero://<host>:<port>/<hsoname>;<field>=<value>
這里<host>和<port>和3.1節(jié)介紹的一樣。如果省略了:<port>,那么端口缺省為1525。這里不需要用戶(hù)名和密碼。<hsoname>是Prospero協(xié)議中特定主機(jī)的對(duì)象名稱(chēng),它需要被編碼。這個(gè)名稱(chēng)是不透明的,它是由Prospero服務(wù)器解釋。分號(hào)“;”是保留字符,它不能不經(jīng)過(guò)引用就出現(xiàn)在<hsoname>中.Prospero URL是通過(guò)聯(lián)系特定主機(jī)和端口上的Prospero目錄服務(wù)器來(lái)解釋的,然后用來(lái)決定訪問(wèn)資源的合適的方法,這些資源自身可能被表示成不同的URL。外部的Prospero鏈接被表示成采用底層訪問(wèn)方法的URL,而不是表示成Prospero URL。注意斜線“/”可以不經(jīng)過(guò)引用就出現(xiàn)在<hsoname>中,應(yīng)用程序假定它不代表任何意義。盡管斜線在服務(wù)器上可以用來(lái)表示層次結(jié)構(gòu),但是這些結(jié)構(gòu)并不被承認(rèn)。注意許多<hsoname>是由斜線開(kāi)頭,在這種情況下,主機(jī)或者端口之后將緊跟一個(gè)雙斜線:前面是URL語(yǔ)法的斜線,后面是<hsoname>的開(kāi)始斜線。(舉例來(lái)說(shuō):<URL:prospero://host.dom//pros/name>表示<hsoname>為“/pros/name”)。另外,與Prospero鏈接相關(guān)聯(lián)的任意的字段和值都可以成為URL中<hsoname>之后的一個(gè)部分。在這種情況下,每個(gè)“字段/值”組合對(duì)都用一“;”(分號(hào))相互以及與URL的其它部分分隔開(kāi)。字段名稱(chēng)和它的值用一個(gè)“=”(等號(hào))分隔開(kāi)。如果出現(xiàn)這種情況,這些域?qū)⒂脕?lái)標(biāo)志URL的目標(biāo)。例如,OBJECT-VERSION域可以被用來(lái)標(biāo)志對(duì)象的特定版本。
新方案注冊(cè)
編輯
可以通過(guò)定義一個(gè)到相應(yīng)URL語(yǔ)法的映射和使用一個(gè)新的前綴來(lái)引入一個(gè)新的方案。URL試驗(yàn)方案可以通過(guò)團(tuán)體間的共同協(xié)議來(lái)使用。用字符“x-”開(kāi)頭的方案名稱(chēng)是保留給試驗(yàn)方案用的。國(guó)際數(shù)字分配權(quán)威(IANA,Internet Assigned Numbers Authority)將管理URL方案的注冊(cè)。任何提交的新URL方案都必須包含一個(gè)訪問(wèn)該方案中資源的法則的定義還必須包含描述這個(gè)方案的語(yǔ)法。URL方案必須具有可論證的實(shí)用性和可操作性。提供這樣一個(gè)示范的方法就是借助一個(gè)為使用已有協(xié)議的客戶(hù)端提供新方案中的對(duì)象的網(wǎng)關(guān)。如果新方案不能夠定位一個(gè)數(shù)據(jù)對(duì)象資源,那么這個(gè)新領(lǐng)域中的名稱(chēng)的屬性必須要進(jìn)行清晰的定義。新方案應(yīng)該在適當(dāng)?shù)牡胤脚ψ駨呐c已有方案相同的語(yǔ)法規(guī)則。對(duì)于可以用URL訪問(wèn)的協(xié)議的地方也是同樣的。客戶(hù)端軟件被規(guī)定配置成使用特定網(wǎng)關(guān)定位符來(lái)通過(guò)新的命名方案間接訪問(wèn)。下面的方案已經(jīng)多次被提議,但這個(gè)文檔沒(méi)有定義它自己的語(yǔ)法。它建議IANA保留它們的方案名以備將來(lái)定義:
afs Andrew 文件系統(tǒng)全局文件名(Andrew File System global file names)。
mid 電子郵件報(bào)文標(biāo)志(Message identifiers for electronic mail).
cid MIME主體部分的內(nèi)容標(biāo)志符( Content identifiers for MIME body
parts).
nfs 網(wǎng)絡(luò)文件系統(tǒng)(NFS)文件名(Network File System file names).
tn3270 交互式3270競(jìng)爭(zhēng)會(huì)話(Interactive 3270 emulation sessions).
mailserver 訪問(wèn)郵件服務(wù)器上的有效數(shù)據(jù)(Access to data available from mail
servers).
z39.50 訪問(wèn)ANSI Z39.50服務(wù)(Access to ANSI Z39.50 services).
BNF
編輯
這是統(tǒng)一資源定位器語(yǔ)法的類(lèi)BNF描述,它使用了RFC822中的約定,除了用“|”表示
選擇,用方括號(hào)[]將可選或者重復(fù)的元素括起來(lái)之外。簡(jiǎn)單地說(shuō)就是文字用引號(hào)""引起
來(lái),可選元素放在方括號(hào)[]內(nèi),元素可以用<n>*來(lái)開(kāi)頭表明有n個(gè)或者更多個(gè)此元素;n
缺省為0。
;URL的一般形式如下:
genericurl = scheme ":" schemepart
;特定的預(yù)定義方案在這里進(jìn)行定義;新方案可以在IANA那兒注冊(cè)
url = httpurl | ftpurl | newsurl |
nntpurl | telneturl | gopherurl |
waisurl | mailtourl | fileurl |
prosperourl | otherurl
;新方案遵從一般語(yǔ)法
otherurl = genericurl
;方案都是小寫(xiě)的;解釋程序應(yīng)該忽略大小寫(xiě)
scheme = 1*[ lowalpha | digit | "+" | "-" | "." ]
schemepart = *xchar | ip-schemepart
;基于協(xié)議的ip的URL方案部分:
ip-schemepart = "//" login [ "/" urlpath ]
login = [ user [ ":" password ] "@" ] hostport
hostport = host [ ":" port ]
host = hostname | hostnumber
hostname = *[ domainlabel "." ] toplabel
domainlabel = alphadigit | alphadigit *[ alphadigit | "-" ] alphadigit
toplabel = alpha | alpha *[ alphadigit | "-" ] alphadigit
alphadigit = alpha | digit
hostnumber = digits "." digits "." digits "." digits
port = digits
user = *[ uchar | ";" | "?" | "&" | "=" ]
password = *[ uchar | ";" | "?" | "&" | "=" ]
urlpath = *xchar ;建立在3.1節(jié)的協(xié)議基礎(chǔ)上
;預(yù)定義方案:
;FTP(文件傳輸協(xié)議,請(qǐng)參考RFC959)
ftpurl = "ftp://" login [ "/" fpath [ ";type=" ftptype ]]
fpath = fsegment *[ "/" fsegment ]
fsegment = *[ uchar | "?" | ":" | "@" | "&" | "=" ]
ftptype = "A" | "I" | "D" | "a" | "i" | "d"
;FILE(文件)
fileurl = "file://" [ host | "localhost" ] "/" fpath
;HTTP(超文本傳輸協(xié)議)
httpurl = "http://" hostport [ "/" hpath [ "?" search ]]
hpath = hsegment *[ "/" hsegment ]
hsegment = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
search = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
;GOPHER(請(qǐng)參考RFC1436)
gopherurl = "gopher://" hostport [ / [ gtype [ selector
[ "%09" search [ "%09" gopher+_string ] ] ] ] ]
gtype = xchar
selector = *xchar
gopher+_string = *xchar
;MAILTO(請(qǐng)參考RFC822)
mailtourl = "mailto:" encoded822addr
encoded822addr = 1*xchar ;在RFC822中進(jìn)一步定義了
;NEWS(新聞,請(qǐng)參考RFC1036)
newsurl = "news:" grouppart
grouppart = "*" | group | article
group = alpha *[ alpha | digit | "-" | "." | "+" | "_" ]
article = 1*[ uchar | ";" | "/" | "?" | ":" | "&" | "=" ] "@" host
;NNTP(網(wǎng)絡(luò)新聞傳輸協(xié)議,請(qǐng)參考RFC977)
nntpurl = "nntp://" hostport "/" group [ "/" digits ]
;TELNET(遠(yuǎn)程登錄協(xié)議)
telneturl = "telnet://" login [ "/" ]
;WAIS(廣域信息服務(wù)系統(tǒng),請(qǐng)參考RFC1625)
waisurl = waisdatabase | waisindex | waisdoc
waisdatabase = "wais://" hostport "/" database
waisindex = "wais://" hostport "/" database "?" search
waisdoc = "wais://" hostport "/" database "/" wtype "/" wpath
database = *uchar
wtype = *uchar
wpath = *uchar
;PROSPERO
prosperourl = "prospero://" hostport "/" ppath *[ fieldspec ]
ppath = psegment *[ "/" psegment ]
psegment = *[ uchar | "?" | ":" | "@" | "&" | "=" ]
fieldspec = ";" fieldname "=" fieldvalue
fieldname = *[ uchar | "?" | ":" | "@" | "&" ]
fieldvalue = *[ uchar | "?" | ":" | "@" | "&" ]
其他的定義
lowalpha = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" |
"i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" |
"q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" |
"y" | "z"
hialpha = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" |
"J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" |
"S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z"
alpha = lowalpha | hialpha
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" |
"8" | "9"
safe = "$" | "-" | "_" | "." | "+"
extra = "!" | "*" | "'" | "(" | ")" | ","
national = "{" | "}" | "|" | "\" | "^" | "~" | "[" | "]" | "`"
punctuation = "<" | ">" | "#" | "%" | <">
reserved = ";" | "/" | "?" | ":" | "@" | "&" | "="
hex = digit | "A" | "B" | "C" | "D" | "E" | "F" |
"a" | "b" | "c" | "d" | "e" | "f"
escape = "%" hex hex
unreserved = alpha | digit | safe | extra
uchar = unreserved | escape
xchar = unreserved | reserved | escape
digits = 1*digit
安全事項(xiàng)
編輯
URL方案自身并不會(huì)造成安全威脅。用戶(hù)需要小心的是:在一個(gè)時(shí)刻指向一個(gè)給定對(duì)象的URL并不會(huì)保證一直指向這個(gè)對(duì)象。甚至也不保證因服務(wù)器上對(duì)象的移動(dòng)而會(huì)在后來(lái)指向另一個(gè)不同的對(duì)象。一種同URL相關(guān)的安全威脅是:構(gòu)建一個(gè)試圖執(zhí)行像取回對(duì)象這樣無(wú)害的等冪操作的URL有時(shí)可能會(huì)導(dǎo)致發(fā)生破壞性的遠(yuǎn)程操作。這個(gè)不安全的URL通常是通過(guò)指定一個(gè)除了那些保留給正在討論的網(wǎng)絡(luò)協(xié)議用的端口數(shù)產(chǎn)生的。客戶(hù)端在無(wú)意間同一個(gè)服務(wù)器打了交道,而這個(gè)服務(wù)器實(shí)際上正在運(yùn)行一個(gè)不同的協(xié)議,這樣就導(dǎo)致URL內(nèi)容中包含的指令被其他的協(xié)議解釋了,從而產(chǎn)生意外操作。一個(gè)例子就是使用gopher URL來(lái)生成一個(gè)原始的消息并通過(guò)SMTP服務(wù)器來(lái)發(fā)送。在使用那些指定端口不是缺省端口的URL時(shí)應(yīng)該進(jìn)行警告,尤其是在這個(gè)端口數(shù)出現(xiàn)在保留空間里面的情況下。當(dāng)URL包含有嵌入式已編碼的特定協(xié)議中的分隔符(例如,telnet協(xié)議的CR和LF字符)并且在傳輸前沒(méi)有被解碼時(shí)應(yīng)該引起注意。這樣除了可能被用來(lái)模擬一個(gè)超出其范圍的操作或者參數(shù),會(huì)干擾這個(gè)協(xié)議,并再一次引起執(zhí)行意想不到的而且可能是有害的遠(yuǎn)程操作。使用包含應(yīng)該作為秘密的密碼的URL是非常輕率的。
來(lái)源:http://curryupcaters.com,網(wǎng)站建設(shè)★網(wǎng)站設(shè)計(jì)★網(wǎng)站制作★網(wǎng)頁(yè)設(shè)計(jì)-599元全包;企業(yè)網(wǎng)絡(luò)推廣☆網(wǎng)站優(yōu)化☆seo☆關(guān)鍵詞排名☆百度快照-2200元全年展示;做網(wǎng)站優(yōu)化排名-網(wǎng)站建設(shè)公司
Copyright ? 2002-2020 curryupcaters.com 版權(quán)所有