简单说说URI的构成
最近我用vscode的时候,有个配置项是homepage。我填了个“./”,提示我不成,这不算个URI。
那怎么算个URI呢,我就查了一下,然后记一笔。
解析URI的结构
举个例子吧:
http://abc.com
这是一个最简单的网址,分为两个部分,http是协议部分,abc.com是服务器地址。
当然这太简单了,较为完整的应该是这样:
http://abc.com:80/home/index.html?a=one&b=two#boom
分段解析一下是这样的:
协议类型:
例子里的是http协议,URI有多种的不同的协议。
比如说以下几种都是URI:
ftp://ftp.test.com
file:///doc/help.txt
mailto:abc@qq.com
可能有人会注意到协议后面有的带俩斜杠有的带仨,有的不带。
带两个斜杠有什么用呢,我查了一下,其实并没有什么用,起到的是一个分隔符的作用,把协议类型和后续的内容分隔开而已。其实按理说只需要一个冒号也就够了,我猜这就是为什么有的协议直接就没有后面的两个斜杠的原因。
至于file为什么有三个斜杠呢,事实上他还是两个斜杠,三个是你的错觉。在上面我们说过结构,file其实只是把服务器地址这个结构给省掉了,因为他标识的是你本地的文件,并不需要服务器地址。如果写成另一种样子你应该就明白了。
file://localhost/test.txt
想想,要是没有了中间的服务器地址,不就成了file:///test.txt了
服务器地址
这个可讲的不多,服务器地址就是普通的一个地址罢了,正经的应该是这个样子:
http://127.0.0.1
这样的一个ip地址,标识了服务器的位置。那为什么日常见到的多数是网址而不是ip地址呢。实际上是你访问网址的时候,首先要过一遍DNS,然后DNS把咱们那些网址转换成了这种ip地址,所以本质上依然是ip地址
端口号
端口标识的是一个服务,或者说一个程序。当你通过前面那些定位到了一个服务器后,就会依靠端口进行更为精确的定位。比如说我开了一个nodejs服务,它监听3000端口,这个时候你访问我这个服务器的3000端口,nodejs才会做出响应。
那又比如说我开了两个,一个是3000端口,另一个是3001。端口号就可以精确的访问到相应的服务。如果要是没有端口号,那整个服务器就成了一坨了,分不清谁是谁了,也不知道你具体要请求谁。
文件路径
呃…这个真的就只是普通的文件路径,没有什么好说的。
查询字符串
查询字符串,这一部分会作为参数传给服务器,服务器接收到这些参数然后做出响应。
具体的例子嘛,你去百度个东西,就能看到网址后面跟了你查询的关键字。也就是百度的服务器接收到了你的关键字,然后返回给你查询的结果,就是你看到的搜索后的内容。
片段标识符
这个相对其他的来说较为少见一点,它跟在URI的最末尾。一般用来定位网页上的内容,比如点击页面上的一个链接,跳到当前页面的某一个位置。它和服务器没有关系,不会发送请求也不会刷新网页。
在目前的前端中,单页面应用常用它来跳转路由。举个例子的话,网易云音乐的网页版,你注意它的链接,就有#号的存在,点击链接的时候看起来是在跳转页面,实际上没有刷新,所以音乐播放也不会断。
结束
首位呼应一下,那么“./”,用URI写到底怎么写呢?
file:./
是的,就酱。
This work is licensed under CC BY-NC-SA 4.0
- ← Previous
解决git乱码 - Next →
小知识: 关于z-index的最大值