写点什么

5 分钟搞懂 URI、URL 和 URN

用户头像
俞凡
关注
发布于: 刚刚

当我们上网的时候,浏览器地址栏里显示的那一串字符串是什么意思?这串字符叫 URL,是 URI 的一种,还有个兄弟叫 URN,这篇文章就带你了解这几个概念。原文:URI vs URL vs URN[1]



当我们处理互联网和在线内容时,URI、URL 和 URN 是我们能听到的最熟悉的单词,下面让我们深入了解它们的含义……


URI - 统一资源识别符(Uniform Resource Identifier)


URI 是标识所有连接到万维网(World Wide Web)的资源的通用术语,是用来标识逻辑资源或者物理资源的字符串序列。换句话说,它可以用来识别互联网上的资源的位置、或名称、或两者兼有。URI 有两个主要的子集,即 URL 和 URN。

URI 语法:scheme:[//[user:password@]host[:port]][/]path[?query][#fragment]


URI 示例foo://example.com:8042/over/there?name=ferret#nose


Scheme:URI 的起始点,并与 URI 协议相关。URI schema 对大小写不敏感,后面带有一个“:”。尽管在实践中可以使用未注册的 schema,但 URI schema 应该向 Internet Assigned Numbers Authority (IANA)注册。几个流行的 URI schema 的例子:HTTP、HTTPS、FTP 和 mailto。


Authority(权限):Authority 字段是位于 schema 字段之后的第二个条目,以两个斜杠(//)开头。这个字段由多个子字段组成:

  • authentication(认证信息)-可选的字段和用户名,密码,由冒号隔开,后面跟着“@”符号

  • host(主机名)—注册的名称或 IP 地址,出现在“@”符号之后

  • port(端口号)-可选字段,后面跟着一个冒号


Path(路径):Path 是第三个字段,由斜杠分隔的段序列来表示,用来提供资源的位置。注意,不管 authority 部分存在或不存在,path 都应该以一个斜杠开始,而不是双斜杠(//)。


Query(查询):Query 是第四个字段,是 URI 的可选字段,包含一串非结构数据并以“?”和 Path 隔开。


Fragment(片段):Fragment 是第五个组成部分,也是一个可选字段,提供指向辅助资源的方向,并以“#”开始。简单来说,Fragment 字段可以用于指向 HTML 页面的特定元素(主资源)。


URL - 统一资源定位符(Uniform Resource Locator)


如上所述,URL URI 的一个子集。URL 是一个给定唯一 Web 资源的地址,表明了这个唯一的 Web 资源的位置,用户可以通过 URL 浏览互联网。如果我们在任何应用程序中点击任何超链接,它会将我们重定向到相关的 URL,这些 URL 也可以很容易的输入到浏览器地址栏中,并可以加载特定的资源。


URL 语法scheme://host:port/path?query-string#fragment-id


URL 示例https://medium.com/p/51b8167cafad


Scheme:URL 的第一部分,表示浏览器请求资源时必须使用的协议。常见例子有 HTTPS(安全版本)和 HTTP(非安全版本)。


Authority:Authority 是 URL 的第二个字段,同样使用“//”开头,包含一些子部分:

  • host(主机名)—分配给主机的域名或 IP 地址,是主机的本地名称和它的父域名的组合

  • port(端口)—表示用于访问 Web 服务器上特定资源的标识,通常 80 表示 HTTP, 443 表示 HTTPS,这是一个可选字段


Path to resource(资源路径):路径是 URL 的第三个字段,是 Web 服务器上资源的路径


Query(查询):查询是 URL 的第四个字段,由传递给服务器端脚本的数据组成,并在 Web 服务器上运行。查询将执行带有“?”的搜索参数,参数通常由名字和值对组成的字符串组成,并由“&”分隔。


Fragment Identifier(片段标识符):片段是可选字段,用于表示页面中的位置,由“#”标识片段标识符。


URN - 统一资源名(Uniform Resource Name)


URN 是一种具有静态名称的互联网资源,即使它的数据被移动到另一个位置也仍然有效。URL 在内容被移动后就失效了,与之不同的是,URN 可以始终跟踪 Web 上某些数据的资源,从而解决了频繁移动数据的问题。


更进一步的,我们可以说,当用户知道唯一资源的位置时,可以使用 URL,但 URN 只需要知道特定资源的名称,而不用指定其位置。


URN 语法:scheme:NID: NSS


URN 示例:urn:ISSN:0167–6423


Scheme:URN 的前导部分,以“:”结尾,不区分大小写


NID(Namespace ID):URN 的第二个字段,是向 IANA 注册的命名空间标识符。NID 后面跟着一个":",可以由字母、数字和" - "组成。


NSS(Namespace Specific String):NID 之后的下一个字段,是一个特定于命名空间的字符串。NID 确定 NSS 的语法解释。NSS 可以由 ASCII 字母、数字、标点符号和特殊字符组成。

  • 2017 年之后,又添加了 q-component 和 r-component,用于向命名资源和解析器传递参数。


区分识别 URI、URL 和 URN 的小技巧

  • URL 是一个可以检索网络资源的链接;URN 是唯一标识符,但不能创建可单击的链接。

  • 人们经常用名字作为例子来描述 URI 和 URN。人的名字就像 URI,因为它标识了一个人,但并没有告诉你在世界上的哪个地方可以找到这样一个特定的人,甚至也没有告诉你我们谈论的是哪个人。

  • 简单的名字不能作为 URN 的例子,因为没有唯一性,世界上有很多人有同样的名字。URN 是一个带有全局惟一标识符的名称,如身份证号或社会保险号。

  • 在网络中,URN 很容易被发现。


本文到此结束,如果你正好想要了解关于 URI、URL 和 URN 的知识,希望这篇文章对你有用。


感谢阅读本文…!!!🤗🤗🤗


References:

[1] https://enlear.academy/uri-vs-url-vs-urn-51b8167cafad

用户头像

俞凡

关注

还未添加个人签名 2017.10.18 加入

俞凡,Mavenir Systems研发总监,关注高可用架构、高性能服务、5G、人工智能、区块链、DevOps、Agile等。公众号:DeepNoMind

评论

发布
暂无评论
5分钟搞懂URI、URL和URN