URL和URI的区别
前言
uri和url一直对这个概念很模糊,因此专门写了一个笔记来彻底搞清楚。(先说好这个笔记的主要作用就是为了便于理解和区分uri和url,这也是我个人的理解和总结,如果有不到位的地方可以提出。如果能帮助你区分了这两个概念也算是自己的一个进步了。)
uri
什么是uri?
URI(统一资源标识符)是标识逻辑或物理资源的字符序列,与URL类似,也是一串字符。通过使用位置,名称或两者来标识Internet上的资源;它允许统一识别资源。
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 |
(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是不一样的。
如果上面的例子还是让你感到困惑,那我就举个更加通俗易懂的。
1.有这样一个需求:
要求找到一本书(书就是资源),这本书在A省份/B市/C区/D街道/xx栋/392-1住户/1号房间/名字叫做《xxx》 (这里就是模拟我们输入网址进行HTTP请求)
那么此时的 《xxx》 这本书 对于 1号房间 来说就是uri
此时的 D街道/xx栋/392-1住户/1号房间/名字叫做《xxx》这本书 对于 A省份/B市/C区 来说就是uri
可以看出uri是不固定的,是相对来说的,具体是什么就看你的参照角度是什么。(不同请求参照角度不一样,所以他们的返回uri有差异)
由此总结:uri是一个标识,用来区别于其他资源的标识。 (相信你对这句话就更能理解了)
url
什么是url?
URL(统一资源定位符)是Internet上资源的地址,可以定义为引用地址的字符串,用于指示资源的位置以及用于访问它的协议。
ok ,理解了uri那么再来说一说什么是url。url就是每次我们输入网址访问某个网站时,浏览器上输入的那一行内容。比如:http://baidu.com
这是一个url,每个链接地址是一个url。
uri和url的关系
uri是url的父级,url是uri的子级。
可能有人就奇怪了,咦?明明是url包含了uri为啥uri反而是父级?
请注意,我这里用的是级别来描述,而不是包含。
我没有说url是uri的一部分,而是说是他的子级。
想要理解这个概念,最好的说明就是java的继承关系。url继承了uri。这样来看是不是瞬间就明白了。
因为url继承了所有uri的内容,所以它比uri更加详细,但是uri是它的父级。
有什么作用?
url的作用
url一般是一个完整的链接,我们可以直接通过这个链接(url)访问到一个网站,或者把这个url复制到浏览器访问网站。
使用URL时我们就是一个直接用户的角色,直接访问就完事了。
uri的作用
uri并不是一个直接访问的链接,而是相对地址(当然如果相对于浏览器那么uri等同于url了)。这种概念更多的是用于编程中,因为我们没必要每次编程都用绝对url来获取一些页面,这样还需要进行分割“http://xx/xxx
”前面那一串,所以编程的时候直接request.getRequestURI就行了,当然如果是重定向的话,就用URL。