分不清URL和URI

看了很多资料还是一头雾水,都是在说定义,没有具体实例
比如 https://www.baidu.com/ 这个地址是URI还是URL还是既是URL也是URI?
可不可以举些例子说明下:哪些是URL 哪些是URI 哪些是既是URL也是URI?

阅读 4.9k
3 个回答

楼上两位的答案有点不准确,这里强调一下。

URx家族有3个主要成员:URIURLURN,其中URLURNURI的子集,所以:

一切URLURN必然都是URI

这也是你看到很多资料上说http://...这种形式的URL也是URI的原因。

下面重点讨论URLURI的区别。

核心区别:URI用来唯一标识一个资源,URL则在此基础上明确规定了定位该资源的方法。

这个基本上所有文章里面都会提到,但是真正理解不太容易。简单来说就是,URL是指定了定位方法的URI

比如,下面的都是URI

// 一个完整的URI,包括协议、域名、路径、资源名等
https://segmentfault.com/q/1010000013464694
// 一个省掉了协议和域名的URI
/q/1010000013464694
// 一个省略了路径和资源名的URI
https://www.baidu.com/
// 一个使用相对路径描述的URI
../a/b/c
// 使用绝对路径标识本地文件的URI
/home/users/me/document/file.txt
……

但是里面只有一部分是URL

// 这个自然是URL
https://segmentfault.com/q/1010000013464694
// 单独拿出来不是一个URL,但是对该网站的程序来说它也是一个URL(相对网站进行定位)
/q/1010000013464694
// 单独拿出来不是一个URL,但是对baidu网站来说它也是一个URL,因为它会默认定位到index主页
https://www.baidu.com/
// 单独拿出来不是一个URL,但是对当前路径来说它也是一个URL,因为用它可以定位到上层目录中的资源
../a/b/c
// 单独拿出来不是一个URL(因为缺失协议部分),但是对本地系统来说它也是一个URL,可以定位到指定文件
/home/users/me/document/file.txt
结论:很多情况下,一个URI并不能当成URL使用,但是如果明确了场景,则很多URI也可以成为URL。所以很多时候并不能肯定地说一个地址是或不是一个URL,而是要看用它能不能定位到目标资源。

对统一资源定位符(uniform resource locator URL)
统一资源标识符(uniform resource identifier URI)
详细解答

例如:
https://segmentfault.com/q/1010000013464694/a-1020000013464945/edit
url为:https://segmentfault.com/q/1010000013464694/a-1020000013464945/edit
uri为: /q/1010000013464694/a-1020000013464945/edit

URI 是统一资源标识符,而 URL 是统一资源定位符。

共同点:

  • 可以唯一确定一个资源

不同点:

  • URI未指明如何去标识一个资源
  • URL明确指明以定位的方式标识资源

例子

比如当前页面的链接为https://segmentfault.com/q/1010000013464694

  • URL为https://segmentfault.com/q/1010000013464694
  • URI为1010000013464694
宣传栏