URI可以进一步分为不透明的和分层的两类。不透明的URI指scheme-specific-part不是以正斜杠(/)开头的绝对的URI。其例子有news:comp.lang.java和前面的mailto:jeff@javajeff.com。不透明的URI并不是用于分解的(超出了识别scheme的范畴),因为不需要验证scheme-specific-part的有效性。与它不同的是,分层的URI可以是以正斜杠开头的绝对的URI或相对的URL。
与不透明的URI不同,分层的URI的scheme-specific-part必须被分解为几个组成部分。这些组成部分是什么?分层的URI标识组件的普通子集的scheme-specific-part符合下面的语法:
[//authority] [path] [?query] [#fragment]
可选的authority组件标识了该URI名字空间的命名机构。如果有这一部分,它就是以一对正斜杠开始的,它可以是基于服务器或基于注册的,并且它以后面的正斜杠、问号或没有其它符号结束。基于注册的授权机构组件有特定大纲的语法(本文没有讨论,因为很少使用它),而基于服务器的授权机构组件的语法如下:
[userinfo@] host [:port]
按照这种语法,基于服务器的授权机构组件可以随意的以用户信息(例如用户名)开始,后面跟着一个@符号,紧接着是主机的名称,以及冒号和端口号。例如jeff@x.com:90就是一个基于服务器的授权机构组件,其中jeff包含了用户信息,x.com包含了主机,90包含了端口。
可选的path组件根据授权机构组件(如果提供了)或大纲(如果没有授权机构组件)识别资源的定位(或位置)。路径(path)可以分成一系列的路径片断(path segment),每个路径片断使用正斜杠与其它的路径片断隔开。如果路径的第一个路径片断以一个正斜杠开始,该路径就被认为是绝对的。否则路径就被认为是相对的。例如,/a/b/c由三个路径片断--a、b和c组成了一个路径,此外,这个路径是绝对的,因为第一个路径片断(a)的前缀是正斜杠。
可选的query组件识别要传递给某种资源的数据。这种资源使用该数据获取或生成其它的传递回调用者的数据。例如,http://www.somesite.net/a?x=y, x=y就是一个查询(query),在这个查询中,x=y是传递给某种资源的数据--x是某种实体的名称,y是该实体的值。
最后一个组件是fragment。尽管该组件作为URI的一部分出现,但不是绝对的。当使用URI进行某种检索操作时,后面执行操作的软件使用fragment聚焦于软件感兴趣的资源部分(在该软件成功检索到资源的数据后)。
为了实际表现前面提到的组件信息,可以使用下面的URI:
ftp://george@x.com:90/public/notes?text=shakespeare#hamlet
上面的URI把ftp识别为大纲,把george@x.com:90识别为基于服务器的授权机构(其中george是用户信息,x.com是主机,90是端口),把/public/notes识别为路径,把text=shakespeare识别为查询,把hamlet识别为片断。本质上它是一个叫做george的用户希望通过/public/notes路径在服务器x.com的90端口上检索shakespeare文本的hamlet信息。在shakespeare成功的返回到该程序后,程序定位hamlet段并把它呈献给该用户。
与不透明的URI不同,分层的URI的scheme-specific-part必须被分解为几个组成部分。这些组成部分是什么?分层的URI标识组件的普通子集的scheme-specific-part符合下面的语法:
[//authority] [path] [?query] [#fragment]
可选的authority组件标识了该URI名字空间的命名机构。如果有这一部分,它就是以一对正斜杠开始的,它可以是基于服务器或基于注册的,并且它以后面的正斜杠、问号或没有其它符号结束。基于注册的授权机构组件有特定大纲的语法(本文没有讨论,因为很少使用它),而基于服务器的授权机构组件的语法如下:
[userinfo@] host [:port]
按照这种语法,基于服务器的授权机构组件可以随意的以用户信息(例如用户名)开始,后面跟着一个@符号,紧接着是主机的名称,以及冒号和端口号。例如jeff@x.com:90就是一个基于服务器的授权机构组件,其中jeff包含了用户信息,x.com包含了主机,90包含了端口。
可选的path组件根据授权机构组件(如果提供了)或大纲(如果没有授权机构组件)识别资源的定位(或位置)。路径(path)可以分成一系列的路径片断(path segment),每个路径片断使用正斜杠与其它的路径片断隔开。如果路径的第一个路径片断以一个正斜杠开始,该路径就被认为是绝对的。否则路径就被认为是相对的。例如,/a/b/c由三个路径片断--a、b和c组成了一个路径,此外,这个路径是绝对的,因为第一个路径片断(a)的前缀是正斜杠。
可选的query组件识别要传递给某种资源的数据。这种资源使用该数据获取或生成其它的传递回调用者的数据。例如,http://www.somesite.net/a?x=y, x=y就是一个查询(query),在这个查询中,x=y是传递给某种资源的数据--x是某种实体的名称,y是该实体的值。
最后一个组件是fragment。尽管该组件作为URI的一部分出现,但不是绝对的。当使用URI进行某种检索操作时,后面执行操作的软件使用fragment聚焦于软件感兴趣的资源部分(在该软件成功检索到资源的数据后)。
为了实际表现前面提到的组件信息,可以使用下面的URI:
ftp://george@x.com:90/public/notes?text=shakespeare#hamlet
上面的URI把ftp识别为大纲,把george@x.com:90识别为基于服务器的授权机构(其中george是用户信息,x.com是主机,90是端口),把/public/notes识别为路径,把text=shakespeare识别为查询,把hamlet识别为片断。本质上它是一个叫做george的用户希望通过/public/notes路径在服务器x.com的90端口上检索shakespeare文本的hamlet信息。在shakespeare成功的返回到该程序后,程序定位hamlet段并把它呈献给该用户。
浙公网安备 33010602011771号