代码改变世界

URL和URI

2016-10-13 13:48  koujiao的蒻苣  阅读(239)  评论(0编辑  收藏  举报

参见:https://tools.ietf.org/html/rfc3986#section-1.1

 

URL是Uniform Resource Locator的缩写,即统一资源定位器,它是一个识别Internet中哪里有信息资源,并且将 Internet提供的服务统一编址的系统。通过URL可以到达任何一个地方寻找需要的东西,比如文件、数据库、图像、新闻组等等,可以这样说,URL是 Internet上的地址簿。URL一般由三个部分构成,各个部分如下: 1. 服务器标识符  通过选择服务器标识符能够确定将要访问的服务器的类型, URL中的服务器标识符可以有HTTP://、FTP://、GOPHER://、TELNET://、NWES://等等类型,分别指定为采用超文本传输协议连接、采用文件传输协议连接、与GOPHER服务器连接、与TELNET会话连接、与USENET新闻组相连接。 2. 信息资源地址  信息资源地址是由两部分构成的,一是机器名称,如www.tsinghua.edu.cn是用来指示资源所存在的机器,另一个是通信端口号(port number),是连接时所使用的通信端口号。端口是Internet用来辨别特定信息服务用的一种软件标识,其设置范围是0到65535之间的整数,一般情况下使用的是标准端口号,可以不用写出。在需要特殊服务时会用到非标准端口号,这时就要写出,如http://www.tsinghua.edu.cn:81。常见的Internet提供服务的端口号,如HTTP的标准端口号为80,TELNET的标准端口号为23,FTP的标准端口号为21等等。 3. 路径名  路径名是给出资源在所在机器上的完整文件名,一般情况下只有用户知道所要找的资源在什么地方时才会给出这个选项。如http://www.tsinghua.edu.cn/index.html等。

 

 

 

通过下面的例子(源自 Wikipedia),我们可以很好地理解URN 和 URL之间的区别。如果是一个人,我们会想到他的姓名和住址。

URL类似于住址,它告诉你一种寻找目标的方式(在这个例子中,是通过街道地址找到一个人)。要知道,上述定义同时也是一个URI。

相对地,我们可以把一个人的名字看作是URN;因此可以用URN来唯一标识一个实体。由于可能存在同名(姓氏也相同)的情况,所以更准确地说,人名这个例子并不是十分恰当。更为恰当的是书籍的ISBN码和产品在系统内的序列号,尽管没有告诉你用什么方式或者到什么地方去找到目标,但是你有足够的信息来检索到它。引自这篇文章:

所有的URN都遵循如下语法(引号内的短语是必须的):

 

 

其中NID是命名空间标识符,NSS是标识命名空间的特定字符串。

一个用于理解这三者的例子

我们来看一下上述概念如何应用于与我们息息相关的互联网。

再次引用Wikipedia ,这些引文给出的解释,比上面人员地址的例子更为专业:

关于URL:

URL是URI的一种,不仅标识了Web 资源,还指定了操作或者获取方式,同时指出了主要访问机制和网络位置。

关于URN:

URN是URI的一种,用特定命名空间的名字标识资源。使用URN可以在不知道其网络位置及访问方式的情况下讨论资源。

现在,如果到Web上去看一下,你会找出很多例子,这比其他东西更容易让人困惑。我只展示一个例子,非常简单清楚地告诉你在互联网中URI 、URL和URN之间的不同。

我们一起来看下面这个虚构的例子。这是一个URI

 

我们开始分析

 

 

是定义如何访问资源的方式。另外

 

 

是资源存放的位置,那么,在这个例子中,

 

 

是资源。

URL是URI的一个子集,告诉我们访问网络位置的方式。在我们的例子中,URL应该如下所示:

 

 

URN是URI的子集,包括名字(给定的命名空间内),但是不包括访问方式,如下所示:

 

就是这样。现在你应该能够辨别出URL和URN之间的不同。