URI 统一资源标识符,用来标识服务器上的资源;
严格意义上来说URI不等同于网址,它的组成如下
URI = URL + URN
在我们通常的HTTP协议中用的网址是URL(统一资源定位符),由于URL太常用太普及了,通常认为URI与URL等同;
想要写出正确的网址也就是URI,我们得需要了解下URI的格式以及其组成的部分;
URI的格式
URI本质就是一个字符串,该【字符串】用于【唯一标识资源的位置或者名字】
下面如图所示就是一个URI的基本组成
URI的基本组成.pngURI的基本组成
scheme
URI第一个组成部分叫做scheme,【协议名】。表示资源应用使用哪种协议来访问
常见的协议名:http、https、ftp;
一个URI没有提供scheme那就不是一个完整的URI,也是无效的;
三个特定的字符【://】
【://】是把scheme和后面的部分分离开来;
纵然【://】设计很奇怪,也有点没必要,但是存在30年了,我们也得接受下嘛;
authority【host:port】
表示资源所在的主机名,通常表现是【host:port】
在HTTP协议中,其中host是必须有的,可以是IP地址也可以是域名;
port不是必须有的,可以省略,我们HTTP协议默认端口是【80】,HTTPS默认的端口是【443】
path
有了前面的协议以及主机名我们就能访问到资源所在的服务器了,但是想要确定资源在服务器中的具体位置就得需要【path】位置
其中path采用了文件系统分离资源的格式,也即是【目录】的表示形成,使用【/】来描述层级关系;
其中path所表示的部分开头必须是以【/】开头的,也就是说是path的一部分;【/】不是属于前面authority的;
example
-
-
协议名:http
-
主机名:nginx.org
-
端口省略,默认为80
-
路径被省略,默认是[/],系统根目录
-
-
file:///D:/dashingqi/study
-
协议名:file
-
主机名:被省略。默认是localhost
-
路径:/D:/dashingqi/study
-
这是file协议的特例,主机名可以没有,默认为localhost
-
URI的查询参数
对于【协议】+【主机名】+【路径】这种可以完全精准定位到一个资源,当我们向给这个资源添加写修饰的参数时,就需要我们的查询参数(query)
example
获取图片是,我们想要180*180的 我们可以使用query
获取列表数据时,我们要分页获取,可以用query
上述的场景使用需要在URI上配上query参数能够满足
query在URI中表现形式
query是在path之后,用一个【?】表示开始但不包括【?】
query中是以key-value形式携带参数,可以带多组【kv】,每组之间使用【&】进行拼接
URI编码
对于URI来说,它是一个字符串,当中只能使用ASCII码,如果出现英语以外的其他语音,它是会进行编码的;
针对【@&?】这些特殊字符也会进行编码;
如果不编码会导致URI的解析出错,URI中的编码称为【转义】
URI中的转义
URI中的转义直接把非ASCII码或者特殊字符的转换成十六进制,然后在前面加上一个【%】
所以你在开发中能看到你请求接口中携带的参数被转义后就是这样的格式【%十六进制】
对就是这么简单;
URI的完整格式
URI完整的格式.png对于上述所说的URI格式,本次新增了【user:passwd@】以及【#fragment】两个
user:passwd@
表示登陆的主机是的用户名和密码,不推荐这种使用方式,太不安全,把敏感信息暴露出来了;
#fragment
片段标识符,是资源内部的一种标签
由于这个参数只能在浏览器这种客户端上使用,服务器是看不到这个参数的,即时发送给服务器,服务器也不会处理的,所以就用不到了;没啥意义;
网友评论