URI
-
定义
Uniform Resource Identifier,统一
资源
标识
,是一组紧凑的字符序列,用于标识抽象资源或物理资源。URI规范定义了URI需要满足的基本语法,以及解析URI的过程。该规范没有为URI具体定义语法,该任务由每个URI方案的各个规范执行。具体含义为:
-
Uniform:统一,对不同类型的资源标示符进行
统一
地语义解释
。这使得资源类型不受限,资源使用场景不受限。
-
Resource:资源,可以是
任何内容
。如:电子文档、图像、服务;甚至是非互联网资源,如人、书。
-
Identifier:标示符,将资源
唯一标识
出来所需要的信息。达到这一目的方法是可以是多样的,只要达到将资源区别出来的目的即可。所以,标识不一定包含资源的特征(虽然大多是通过特征来实现该目的),也不一定包含资源的位置。
-
-
特点
- 简单
- 通用
- 易扩展
-
功能
通过URI,可以通过某种协议,在
网络
上和资源
(如,人)的某种表示
(人在网络中的存在形式,如文字描述文档或声音描述音频)进行交互
。典型应用场景是万维网,使用的是URL。 -
语法
// URI 采用层次结构,包含 5 部分:scheme, authority, path, query, fragment // 其中,scheme 和 path 是必选项(虽然 path 的值可以为空)。authority 的格式 会影响到 path 的表示 // 1、scheme:指定标示符使用的规范,即如何处理这个文件。 // 2、authority:层次结构的命名权威,以便将剩余部分名称空间的管理委托给该命名权威。包括: // a)userinfo:可能包含一个用户名,以及关于如何获得访问资源的授权的特定于模式的信息 // b)host:主机 // c)port:端口 // 3、path:通常采用层次结构,用于标识 特定 scheme 和 authority(如果有)下的资源 // 4、query:非层次结构,和 path 一起,用于标识 特定资源(如资源内的某个片段),某些 scheme 会用这个组件传递参数,通常是"键-值"对形式 // 5、fragment:间接识别主要资源的二级资源(如主要资源的一部分)。在客户端内部使用的,不会传送给服务器 URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] hier-part = "//" authority path-abempty / path-absolute / path-rootless / path-empty // 上面的定义和下面等同: URI = scheme:[//authority]path[?query][#fragment] authority = [userinfo@]host[:port]
-
例子
userinfo host port ┌─┴────┐ ┌────┴────────┐ ┌┴┐ https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top └─┬─┘ └───────┬────────────────────┘└─┬─────────────┘└──┬───────────────────────┘└┬─┘ scheme authority path query fragment ldap://[2001:db8::7]/c=GB?objectClass?one └─┬┘ └───────┬─────┘└─┬─┘ └──────┬──────┘ scheme authority path query mailto:John.Doe@example.com └──┬─┘ └─────────┬────────┘ scheme path news:comp.infosystems.www.servers.unix └─┬┘ └───────────────┬───────────────┘ scheme path tel:+1-816-555-1212 //电话号码格式 也可以作为 URI格式 └┬┘ └──────┬──────┘ scheme path telnet://192.0.2.16:80/ └──┬─┘ └──────┬──────┘│ scheme authority path urn:oasis:names:specification:docbook:dtd:xml:4.1.2 └┬┘ └──────────────────────┬──────────────────────┘ scheme path
URL
-
定义
URL(Uniform Resource Locator),统一资源定位符。 -
格式
// 协议类型可以是 http,ftp,https,telnet,file。主要在`万维网`中应用(对应http协议),俗称Web地址。 // "服务器地址"通常为域名,有时为IP地址 // 标准格式: 协议类型:[//服务器地址[:端口号]][/资源层级UNIX文件路径]文件名[?查询][#片段ID] // 完整格式: 协议类型:[//[访问资源需要的凭证信息@]服务器地址[:端口号]][/资源层级UNIX文件路径]文件名[?查询][#片段ID]
-
特点
基于
资源位置
访问资源
URN
-
定义
Uniform Resource Name,统一资源名称。可以在不知道其网络位置及访问方式的情况下讨论资源。
-
格式
// 大小写不敏感 // 使用 urn: 作为 URI scheme // <NID>是命名空间标识,它是一个“命名空间特定”的字符串,决定了如何解释<NSS>的句法 urn:<NID>:<NSS>
-
特点
- 持久性:即使资源已经不存在或者不可用,其URN仍然存在。
- 位置无关性:不提供资源位置或者访问该资源的方法。
URI URN URL - 关系
URI可以是一个统一资源定位符号(URL),也可以是一个统一资源名称(URN),又或者两者都是。即 URI 是 URL 和 URN 的超集,URL 和 URN 都是是 URI 的一种实现形式。URI可能同时拥有名字(URN)和位置(URL)。
常见问题
URL最后斜杠/的作用
当Web服务器接收到对某个末尾不含斜杠的url请求时,例如“http://www.abc.com/abc”,这时服务器会搜索网站根目录下有没有名为“abc”的文件,如果没有就把abc当做目录处理,然后返回abc目录下的默认首页。当Web服务器接收到的是末尾带斜杠的请求时就会直接当做目录处理。
参考文献
https://en.wikipedia.org/wiki/Uniform_Resource_Identifier URI - wiki
https://tools.ietf.org/html/rfc3986#section-1.2.1 URI - RFC
https://blog.csdn.net/gogzf/article/details/78261340 URL的语法
https://blog.csdn.net/u010525694/article/details/78591355 URL最后斜杠/的作用