初识URL与URI
最初看到URL和URI, 是在学习TCP/IP协议的时候。当时的教科书上也是讲得迷迷糊糊,让人认为这是两个没有区别的概念。出来工作之后,发现这其中还是有些奥妙和区别的,但也是看得我一头雾水。包括有些文章也是,直接摘抄的概念,可能作者本身都没有弄懂这其中原理。参考了几篇好文之后,我也来写一写,希望可以加深理解。
经验式理解:http://localhost:8080/myweb/hello.html
以上web地址,加粗部分+非加粗部分=URL;非加粗部分=URI。这是大部分程序员对两者理解的一个典型代表。
URL的定义
URL(Uniform Resource Locator):统一资源定位符
顾名思义,URL就是一个表示资源位置的字符串,基本的URL格式为 “协议://IP地址/路径和文件名”,如:ftp://ftp.is.co.za/rfc/rfc1808.txt
最重要的一点,URL对于我们而言,就是将URL输入到浏览器地址栏上就可以访问到对应资源。
URI和URN
URL的概念很容易理解,但是URI和URN的概念就显得抽象了。
“A Uniform Resource Identifier (URI) 是一个紧凑的字符串用来标示抽象或物理资源”,可以看出其和URL的目的是相同的,都是通过使用字符串来标示资源,这样看来,像开头加粗部分的字符串似乎并不能完整标识资源。
“A Uniform Resource Name (URN)唯一标识一个实体的标识符”,但是不给出实体的位置,通过引用一个或多个URL来实现标识指针功能。现实中可见的使用:P2P下载中使用的磁力链接。
现在可以下一个基本的结论,那就是URI包含URL or URI or (介于两者之间的模糊地带)
现实中的例子
以上所述,我们终于将全部的概念都梳理出来了,但其实所有的概念都可以在我们的现实得到映射。
首先给大家举个例子,有一家公司的总经理,某天,给了我一张名片,上面写了他的头衔,北京XXX公司总经理张三,还有他的办公室地址,北京市海淀区长安街35号北京XXX公司总经理办公室,那么,我以后给我的朋友吹牛,我认识北京XXX公司的总经理张三,我的朋友都知道北京XXX公司的总经理是一个叫张三的人,那么,这个头衔就和张三对应起来了,只要一说到这个头衔,大家都知道说的是张三,反应到网络世界,这个头衔就叫做URI,只要你给我一个URI,我就知道它代表了什么,比如,http://www.sina.com.cn代表了新浪网,admin@qq.com代表了某一个人的qq邮箱。你的qq号也是一个URI(腾讯服务器内可以识别就是你的QQ账户),URI就是网络资源的头衔,通过URI标记可以把网络世界里面的每一个事物都加以标记并区分开来。
好的,现在出现了一个问题,你现在知道北京XXX公司总经理是张三,“北京XXX公司总经理”就是张三这个人的URI,可是,我让你亲自去和张三见一面,你做得到吗?你肯定做不到,因为你不知道他的地址,虽然你有他的URI头衔,但是除此以外,你对他具体的情况一无所知,于是你要定位到他,你就必须得到他的办公室地址,通过“北京市海淀区长安街35号北京XXX公司总经理办公室”这个地址,你就找到了张三。反应到网络世界,网络世界里面的每一个资源不光有自己的头衔,还要能够被人访问,被人找到,所以,网络地址是必须的,否则,这个网络资源的存在没有任何意义,这个地址就叫做URL。
URL是URI的子集,所有的URL都是URI,但不是每个URI都是URL,还有可能是URN。