URI、URL、URN
起源:
这三个缩略词是Tim Berners-Lee在一篇名为RFC 3986: Uniform Resource Identifier (URI): Generic Syntax的文档中定义的互联网标准追踪协议。
Tim Berners-Lee ,万维网的发明者,同时也是万维网联盟(W3C)的负责人
统一资源标识符(URI)提供了一个简单、可扩展的资源标识方式。URI规范中的语义和语法来源于万维网全球信息主动引入的概念,万维网从1990年起使用这种标识符数据,并被描述为“万维网中的统一资源描述符”。
- URI全称Uniform Resource Identifier,统一资源标识符
- URL全称Uniform Resource Locator,统一资源定位符
- URN全称Uniform Resource Name,统一资源名称
首先我们要弄清楚一件事:URL和URN都是URI的子集。
换言之,URL和URN都是URI,但是URI不一定是URL或者URN。为了更好的理解这个概念,看下面这张图片。
截屏2021-11-03 上午8.43.23.png
我们可以很好地理解URN 和 URL之间的区别。如果是一个人,我们会想到他的姓名和住址。
URL类似于住址,它告诉你一种寻找目标的方式(在这个例子中,是通过街道地址找到一个人)。要知道,上述定义同时也是一个URI。
相对地,我们可以把一个人的名字看作是URN;因此可以用URN来唯一标识一个实体。由于可能存在同名(姓氏也相同)的情况,所以更准确地说,人名这个例子并不是十分恰当。更为恰当的是书籍的ISBN码和产品在系统内的序列号,尽管没有告诉你用什么方式或者到什么地方去找到目标,但是你有足够的信息来检索到它
举个栗子
这是一个URI:
http://bitpoetry.io/posts/hello.html#intro
我们开始分析:
http://
是定义如何访问资源的方式。另外
bitpoetry.io/posts/hello.html
是资源存放的位置,那么,在这个例子中,
#intro
是资源。
URL是URI的一个子集,告诉我们访问网络位置的方式。在我们的例子中,URL应该如下所示:
http://bitpoetry.io/posts/hello.html
URN是URI的子集,包括名字(给定的命名空间内),但是不包括访问方式,如下所示:
bitpoetry.io/posts/hello.html#intro
就是这样。现在你应该能够辨别出URL和URN之间的不同。
总结
关于URL:
URL是URI的一种,不仅标识了Web 资源,还指定了操作或者获取方式,同时指出了主要访问机制和网络位置。
关于URN:
URN是URI的一种,用特定命名空间的名字标识资源。使用URN可以在不知道其网络位置及访问方式的情况下讨论资源。
URI可以分为URL,URN或同时具备locators 和names特性的一个东西。URN作用就好像一个人的名字,URL就像一个人的地址。换句话说:URN确定了东西的身份,URL提供了找到它的方式。
URL的基本构成
截屏2021-11-03 上午9.07.07.png- Scheme:也叫协议Protocol,该URL的协议部分是https(超文本传输协议),https表示用安全套接字层传送的超文本传输协议,它是一种加密的HTTP传输协议,比HTTP更安全。常用的协议有http、https、ftp、file、mailto
- User:用户信息,格式为:<user>:<password>,目前已经很少用到
- Host:也叫域名Domain,从后往前,com是根域名,example.com是顶级域名,二级域名,就是最靠近顶级域名左侧的字段。如:zh.wikipedia.org中,wikipedia就是二级域名(有资料认为, 在顶级域名后面, 还存在一级域名, 那么zh就是二级域名)。,举个正在使用中的三级域名的实例,www.ncic.ac.cn,其中www前缀表明此域名对应着万维网服务,每一级域名由英文半角句号分区,“ncic”作为三级域名是“ac.cn”的子域名。
- Port:端口号,用来区分同一台服务器上不同服务的标识
HTTP默认端口为80,端口范围是0-65535之间
HTTPS默认端口号443,FTP默认端口号21
跟在域名后面的是端口,域名和端口之间用 ":" 作为分隔符。另外端口不是URL必须的部分,如果省略端口将采用默认端口 - Path:资源路径,域名最后一个斜杠 / 到?部分,如果没有?则是从域名后的最后一个 / 到 #
- Resource:资源文件,省略时静态服务器默认访问index.html 截屏2021-11-03 上午9.44.20.png
- Query:参数Parameters,以问号?开始,key=value形式,中间用&隔开。也就是常用的GET请求参数
- Fragment:锚信息(#哈希),也叫做Anchor或者Hash,由一个井号#开始,之后的字符都为fragment。页面内部跳转锚点
网友评论