Open Samgao0312 opened 2 years ago
Uniform Resource Indentifier / 统一资源标志符
URI 为了定位某一个特定的资源而且设计的。用于标识互联网上的唯一的资源的一个方式。它包含了 URL 和 URN。
URI
URL
URN
Uniform Resource Licator / 统一资源定位器
URL 用来找到这个资源它所在的位置,并且去访问它得到它。
URL 的组成部分:
http://user:pass@host.com:80/path?query=string#hash
http://
user:pass@
web
url
host.com
IP地址
IP
:80
host
http协议
path
HTTP
web服务
web应用
query=string
#hash
此类格式的都叫URL, 比如ftp协议。
ftp协议
域名方便记忆、方便传播。
URN (Uniform Resource Name)统一资源名称,这个东西,因为现在使用的不多,所以大家只要了解一下定义就可以了。
首先,它是一个 永久统一资源定位符。什么意思呢? 如果链接连接的资源搬了位置,那么可能导致这个链接访问的时候请求不到具体的内容。一般情况下,比如说现在服务访问的是一个不存在的链接,都会返回404。但是,这个URL是不会告诉你这个资源被搬到了哪个地方的。
404
怎么样才能访问到你想要返回的这个资源呢? URN就解决这个问题,很多这方面的专家都在研究。如何在出现这种情况的时候,即便当资源被搬到了一个新的位置,还可以通过URN访问的这个地方。也就是说,最终想实现的是,只要你把这个URN指向了这个资源,即便你把这个资源搬来搬到了一个很远的地方,它还是能够找到这资源的。URL不具备这个能力的。
目前还没有非常成熟的一个使用方案,业界也没有什么非常好的一个使用场景。
URI
Uniform Resource Indentifier / 统一资源标志符
URI
为了定位某一个特定的资源而且设计的。用于标识互联网上的唯一的资源的一个方式。它包含了URL
和URN
。URL
Uniform Resource Licator / 统一资源定位器
URL
用来找到这个资源它所在的位置,并且去访问它得到它。URL
的组成部分:http://user:pass@host.com:80/path?query=string#hash
http://
: 定义了以什么样的方式、什么样的协议访问资源。user:pass@
: 这一部分代表当访问这个资源时,如果资源需要有特定的身份才能访问,那么可以在前面加入user:pass@
指定说我就是这个用户。并且你的服务可以通过我的用户名跟密码来进行一个认证来,表示用户是真的用户而不是一个虚假的。这种方式在现在的web
开发里基本是不太用的到。因为有更好的方式去做用户认证,如果每一次需要用户认证的一个内容都要在url
里面去输入用户名密码,肯定是一个非常不安全的,而且是非常麻烦的一个操作。现在的web开发基本上用不到,大家只要知道有这种方式——在URL定义里面,有这一块区域留给用户认证的就可以了。host.com
: 域名或IP地址
。用来定位资源所在的服务器在互联网中的一个位置,互联网中定位一台机器最基础的方式就是他的IP
,可以直接通过IP找到这台机器。如果是域名,要通过DNS服务解析成IP,然后才能定位到哪台服务。所以,他就是用来找到这一台服务器所在的互联网位置。:80
: 端口。为什么要有端口呢?因为每一台服务器都有非常非常多的端口,在这台服务器上,你可以跑很多的软件,就是web
服务。它可以监听各种不同的端口。那么,如果我们要找的是这台物理服务器上面某一个web
服务里面存放的这些资源的话,我们就要指定我们是要找的哪个web
服务。也就是说端口就是用来定位我们host
找到的那台物理服务器上面它存放的许多个web
服务当中的某一个web
服务。因为整个http协议
它其实就是一个用来定位的。所以,我们先要找到这台物理服务器,然后再找到它的一个web服务器,再然后我们才能再根据后面的一些内容去定位的这个web
服务器下面存放的内容。其实相当于我们的搜索范围从大的往小的一点一点精确精确,最后精确到我们真正想要找到这个内容。path
: 路由。路由是什么意思呢?因为一个web
里面可能存放了非常多的内容,我们具体要如何找到这个内容,那么我们可以通过路由这个东西来进行确定。 从HTTP
的定义上来讲,我们这个路径应该是直接对应的我们这个web服务
的一个目录结构下面的路径。很多时候,因为现在我们的web应用
变得越来越复杂,我们的很多数据都是存在数据库里面的,而不是对我们某一个磁盘上的一个文件它所在的位置。所以我们更多的时候是直接把它用来辨别我们现在这个url索要请求的数据,在程序里面去判断而不是直接对一个目录结构的一个映射关系。query=string
: 搜索参数。就是说我们要请求的资源,我们如何去进行一个搜索进行一个查找或者一些操作的一个方式。基本上现在web服务
就是用它来传参。#hash
: 这个哈希是干嘛用的呢,在HTTP
的定义里面,我们请求的前面的整个url
找到了一个文档,但是如果这个文档非常的大,比如说有好几兆的内容,然后又都是文字,这个时候如果一下子返回这么多内容,我并不需要。作为用户来讲,我只是想看一下其中一个段落,那么这个时候就可以用到这个。现在,前端页面开发的时候,我们经常使用哈希来作为一个锚点的一个定位的工具。此类格式的都叫URL, 比如
ftp协议
。URN
首先,它是一个 永久统一资源定位符。什么意思呢? 如果链接连接的资源搬了位置,那么可能导致这个链接访问的时候请求不到具体的内容。一般情况下,比如说现在服务访问的是一个不存在的链接,都会返回
404
。但是,这个URL
是不会告诉你这个资源被搬到了哪个地方的。怎么样才能访问到你想要返回的这个资源呢?
URN
就解决这个问题,很多这方面的专家都在研究。如何在出现这种情况的时候,即便当资源被搬到了一个新的位置,还可以通过URN
访问的这个地方。也就是说,最终想实现的是,只要你把这个URN指向了这个资源,即便你把这个资源搬来搬到了一个很远的地方,它还是能够找到这资源的。URL
不具备这个能力的。目前还没有非常成熟的一个使用方案,业界也没有什么非常好的一个使用场景。