时间:2023-02-10 10:24:02 | 来源:建站知识
时间:2023-02-10 10:24:02 来源:建站知识
一般我们日常在上网的时候,会在浏览器的地址栏里输入一个网站的 "网址",点击下回车,就会跳到你想去的网站,就类似这样baidu.com
或者qq.com
就能正常上网了,但其实我们输入的只是整个URL中的一小部分http://
这部分就是协议部分,即指定了URL是以什么协议发送网络请求的http://
、https://
、ftp://
、file://
,比如: http://
就是超文本传输协议,平时上网大多用这个协议,https://
是以安全为目标的HTTP协议。localhost
就是地址部分,用来确定URL所要访问的服务器的网络地址(也就是网址)。在URL中,地址可以用三个形式来表示:域名
、主机名
、IP地址
www.baidu.com
、www.qq.com
就是域名,域名也分一级域名
、二级域名
、以及顶级域名
。.com
这种就是顶级域名
,顶级域名一般都代表网站属于某种机构或组织。像.com
(商业机构)、.org
(非盈利组织)、 .gov
(政府机构)这类就是常见的顶级域名,除此之外,还有些代表国家的顶级域名,如:.cn
(中国)、.us
(美国)、.jp
(日本)等等qq.com
就是一级域名
,看上去十分简洁,在顶级域名.com
前只有一个单词短语mail.qq.com
和v.qq.com
这种前面加了mail.
、v.
等字符串的就叫二级域名
DNS
服务器找到域名对应的IP地址
,再通过底层的TCP/IP
协议路由到对应的机器上去 (这些内容不是本文的重点暂时略过,先挖个坑再说)主机名
找到你要访问的计算机。主机名和域名一样,计算机和路由器不认它,需要通过HOSTS文件
这样的技术找到主机名
和IP地址
的关联关系,最后还是翻译成IP地址
再继续发送网络请求localhost
也是主机名
,但是一种比较特殊的主机名
,是给 回环地址的一个标准主机名,就是代表本机自己的地址。IP地址
来代替域名或主机名,如192.168.0.1
,关于IP地址
的相关知识点放到以后再讲(继续挖坑):
后面的那串数字8080
就是端口号,一台服务器上可以开多个端口号,往往一个网络服务程序就对应一个端口号Tomcat
和SSH
,让它们分别关联端口8080
和22
,那URL中如果端口号是8080
就是会访问到Tomcat
程序,22
就会连接SSH服务。http://www.baidu.com
没看到有端口号啊80
,只是它被隐藏起来了,我们看不到而已,而这个80
端口也就是URL的默认端口号80
,如果协议是http://
,默认端口号为80
,但若是https://
协议,默认端口号就是443
了/
开始,到最后一个斜杠/
结束的那部分,也就是图中/app/user/
那部分即为虚拟目录
/
为根目录,每多一个/
就多进入一层目录/
开始,到?
为止,没有?
则到#
为止,或者?
和#
都没有就是到整个URL结束为止的那部分就为文件名info.do
这部分,它一般包含文件名和扩展名('.'后面那部分),用来指代一个URL所访问的具体文件或资源,它可以是图片、html文件、css文件,也可以是js文件、字体文件等等,它也可以不是某种文件,而是服务端后台执行的某段程序。http://www.baidu.com
这样的URL就没有文件名,但服务器会在缺省的情况下给你定位到某个特定的文件或程序上去。?
后到#
结束,即图中的?uid=101&ty=2
为查询参数Query
,它是用来向服务端以字符串的形式传递参数和少数数据用的键值对
的形式进行表示,如 a=1
、b=2
就是两个键值对
,键为"a"和"b",值为对应的"1"和"2", 多个键值对
用&
连起来:a=1&b=2
a&b
这样字符串,和查询参数键值对的连接符&
冲突了,若不加以区分就会产生歧义a&b
变成了a%26b
,就不再包含会冲突的特殊字符http://localhost/do?url=http://www.baidu.com
这种特殊情况不会有歧义,因为计算机系统认得出参数是另一串URL,就会按URL的形式来解析,但当子URL又包含子参数和多子键值对的时候也难免会分不清参数到底是儿子的还是父亲的,这时还是强制编码的好key
对应一个value
,那如果是一个key
要传递多个值,也就是一个列表咋办?也好办a=1&a=2&a=3
,这里穿了3个参数名都为a
的查询参数,是完全可以的,可以利用这种特性,按顺序将 1
、2
、3
作为参数a
的列表值[]
,如:a[]=1&a[]=2&a[]=3
#
后面那部分字符串,#abc
就是锚部分Reference
,通常也是用来传递参数等信息,但与查询参数的本质区别就是这部分内容不会被传递到服务器端vue
、reactjs
等前端框架的兴起,锚作为前端javascript
程序处理的参数载体也越来越重要了<用户名>@<密码>
这种用户验证信息在URL中的传递,由于篇幅的关系还没有讲到HTTP
协议的其中几个重要部分,如果这一系列文章对你有帮助,别忘了关注哦~HTTP
框架: Forest官网:http://forest.dtflyx.com这是一款声名式的HTTP框架,简单好用,因为它将拼接URL、请求头、请求体参数、等待响应,失败重试,转换响应数据到 Java 类型等脏活累活全包了
Gitee仓库:https://gitee.com/dt_flys/forest
Github仓库:https://github.com/dromara/forest
关键词:基础,系列