前言:
知乎上面得赞最高的说法是这样的,适合迅速理解:
URI:
universal resource indentifier:统一资源定义
URL:
universalresource local:统一资源定位
其目的都是把一个资源独一无二的定位出来,实际URL是URI的子集,拿一个人做比方:
URL可以是:动物住址协议://地球/中国/江苏/….../xxx.man
而URI可以是身份证号:XXXXXX
所以都是用来标识一个唯一定位的。
其实,为了表示科学性,我还是喜欢用官网的概述,并且根据官网看,上述的说法也是有问题的:
在最高级别上,字符串形式的 URI 引用(以下简写为 "URI")语法如下
[scheme:]scheme-specific-part[#fragment]
分类:
其中,可以按两种方式进行分类:
1. 绝对URI,相对URI:按照是否指定了方案(scheme)
2. 分层URI,不透明URI:根据scheme-specific-part是否以斜线字符 ('/')开始
如:
不透明URI (不透明URI是绝对URI)
mailto:java-net@java.sun.com
news:comp.lang.java
urn:isbn:096139210x
分层URI:
http://java.sun.com/j2se/1.3/
docs/guide/collections/designfaq.html#28
URI组成部分:
组成部分 类型
方案 String
特定于方案的部分 String
授权 String
用户信息 String
主机 String
端口 int
路径 String
查询 String
片段 String
关于URI和URL
其实官网的释义十分清楚:
URI 是统一资源标识符,而 URL 是统一资源定位符。因此,笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。上面的 mailto、news 和 isbn URI 都是 URN 的示例。
而URI 和 URL 概念上的不同反映在此类(URI类)和 URL 类的不同中:
一个 URI 实例和一个支持语法意义上的、依赖于方案的比较、规范化、解析和相对化计算的结构化字符串差不多,不特定scheme和主机,而URL类则是描述了URL语法, URL 是一个结构化字符串,它支持解析的语法运算以及查找主机和打开到指定资源的连接之类的网络 I/O 操作