1. URI:统一资源标识符
URI(Uniform Resource Identifier)是统一资源标识符,是用于标识资源的通用术语。
URI采用一种特定语法标识一个资源的字符串。所标识的资源可能是服务器上的一个文件。不过,也可能是一个邮件地址、新闻消息、图书、人名、Internet主机或者任何其它内容。
通过URI找到资源是通过对名称进行标识,这个名称在某命名空间中,并不代表网络地址。
它包含URL和URN。
支持的协议有http、https、ftp、mailto、magnet、telnet、data、file、nfs、gopher、ldap等。
URI的格式为:
scheme:[//authority]path[?query][#fragment]
其中:
- scheme 指定了访问资源的协议(如 http、ftp 等)。
- authority 是可选的,通常包括 user:password@host:port。
- path 指定了资源的路径。
- query 是可选的,提供额外的参数。
- fragment 是可选的,用于指定资源的子部分。
2. URL:统一资源定位符
URL(Uniform Resource Locator)是统一资源定位符,是 URI 的一个子集,唯一地标识一个资源在Internet上的位置。不管用什么方法表示,只要能定位一个资源,就叫URL。
两个例子:
https://www.baidu.com
ftp://www.example.com/resource.txt
3. URN:统一资源名称
URN(Uniform Resource Name)是统一资源名称。它命名资源但不指定如何定位资源,比如:只告诉你一个人的姓名,不告诉你这个人在哪。例如:telnet、mailto、news 和 isbn URI 等都是URN。
URN的格式为:
urn:<NID>:<NSS>
其中:
- urn 是固定的前缀。
- 是命名空间标识符(Namespace Identifier)。
- 是命名空间内的字符串(Namespace Specific String)。
4. 三者的区别
- URI 指的是一个资源
- URL 用地址定位一个资源;
- URN 用名称定位一个资源。
举个例子:
去寻找一个具体的人(URI);
如果用地址:XX省XX市XX区…XX单元XX室的主人,就是URL;
如果用身份证号+名字去找就是URN(身份证号+名字,无法确认资源的地址) 。
在Java类库中,URI类不包含任何访问资源的方法,只能标识资源。URL类可以访问资源,可以获取指定资源的流信息。