# 一、URI 和 URL 的区别与联系

# 1.1 什么是 URI

uri 就类似一个独一无二的身份标识。

准确的说是某个网络资源的特有标识 (用来区别于其它资源的独一无二的标识)

具体什么样的叫做 URI 呢?我就直接给个 java 所举的 URI 例子:

(First line of HTTP request) HTTP 请求的第一行uri
POST /some/path.html HTTP/1.1/some/path.html
GET http://foo.bar/a.html HTTP/1.0/a.html
HEAD /xyz?a=b HTTP/1.1/xyz

从中可以看到,不同请求返回的 URI 是不一样的。

如果上面的例子还是让你感到困惑,那我就举个更加通俗易懂的。

有这样一个需求:

要求找到一本书 (书就是资源),这本书在 A 省份 / B 市 / C 区 / D 街道 /xx 栋 / 392-1 住户 / 1 号房间 / 名字叫做《xxx》 (这里就是模拟我们输入网址进行 HTTP 请求)

那么此时的 ==《xxx》这本书,对于 1 号房间 == 来说就是 URI

此时的 D 街道 /xx 栋 / 392-1 住户 / 1 号房间 / 名字叫做《xxx》这本书,对于 A 省份 / B 市 / C 区 来说就是 RUI

可以看出 URI 是不固定的,是相对来说的,具体是什么就看你的参照角度是什么。(不同请求参照角度不一样,所以它们的返回 URI 有差异)

由此总结:URI 是一个标识,用来区别其它资源的标识。

# 1.2 什么是 URL

URL 就是每次我们输入网址访问某个网站时,浏览器上输入的那一行内容。比如:http://baidu.com 这是一个 URL,每个链接地址就是一个 URL

# 1.3 URI 和 RUL 的关系

URI 是 URL 的父级

可能有人就奇怪了,明明是 URL 包含了 URI 为啥 URI 反而是父级?

请注意,这里用的是级别来描述,而不是包含

我没有说 URL 是 URI 的一部分,而是说是它的子级。

要想理解这个概念,最好的说明就是 java 的继承关系。URL 继承了 URI。

因为 URL 继承了所有 URI 的内容,所以它比 URI 更加详细,但是 URI 是它的父级

# 1.4 两者的作用

# 1.4.1 URL 的作用

URL 一般是一个完整的链接,我们可以直接通过这个链接 (URL) 访问到一个网站,或者把这个 URL 复制到浏览器访问网站

使用 URL 时我们就是一个直接用户的角色,直接访问就完事儿了。

# 1.4.2 URI 的作用

URI 并不是一个直接访问的链接,而是相对地址 (当然如果相对于浏览器 URI 等同于 URL 了)。这种概念更多的是用于编程中,因为我们没必要每次编程都用绝对 URL 来获取一些页面,这样还需要进行分割 "http://xx/xx" 前面那一串,所以编程的时候直接 reuqest.getRequestURI 就行了,当然如果是重定向的话,就用 URL。