哒哒哒~输入url
image.png
一、DNS解析
客户端:用户输入url回车了,瞅瞅又让俺去哪?我脑子里不记得之前访问过;
客户端:hosts 你知道那货想去哪吗?
Hosts: 俺也不知道,去找DNS吧,俺有就给你了;
客户端:好勒,我去找DNS老大哥;
- 浏览器收到用户输入的域名地址后,会先查询浏览器缓存, 浏览器会缓存之前拿到的DNS 2-30分钟时间
- 如果没有则去找本地hosts文件,检查在文件中是否有响应的域名或者IP对应关系,
(hosts路径:C:\Windows\System32\drivers\etc)- 如果有则发送请求至指定的IP地址,没有则去找本地DNS服务器
客户端:路由先生,你还记得不?
路由器:我脑子也不行了,不太记事,去看看本地服务器有不?
本地服务器:运营商(电信)的服务器,
但是如果电脑与运营商之间有无线或者有线路由的话,路由器也会缓存DNS,所以会先问路由先生
当路由缓存中也没有时,则会去查询本地服务器
本地DNS服务器: 我也不记得,我去找找老根、老顶、老极
本地DNS服务器: 唉~每个依次找了个遍:总算拿到目标域名的IP,好难呀,老弟,给你要的IP"
客户端:谢谢大哥~
递归查询:从根域名服务器,再到顶级域名服务器、再到极限域名服务器,需要依次查询
如果本地DNS有了根服务器的缓存,则不会去找根服务器
获取到对应的IP后,则向IP地址定位的HTTP服务器发起TCP链接
二、建立TCP链接
客户端: 服务器大哥,在吗?
服务器: 老弟,我在呢,
客户端:好勒,
image.png
客户端发送一个带有SYN标志的数据包给服务端,服务端收到后,回传一个SYN/ACK的认证信息,最后客户端再次回传一个带ACK标志的数据包
SYN:建立联机 ;
Sequence number : 随机的顺序号码
客户端发送SYN = 1 ,随机生成Seq number= 1234567的数据包给服务器,服务端有SYN = 1则知道客户端要建立连接
ACK:确认联机信息
服务器收到请求后,向客户端发送Ack number = (客户端的Seq + 1), SYN = 1, ACK = 1; 随机产生的Seq = 789110的包
客户端收到ACK, 检测是否正确(ack number = 第一次发送的Seq number+ 1),若正确,客户端会再发送ack number = (服务端的Seq + 1),ack = 1; 服务端收到后确认seq值与ack = 1 则建立成功
三、发送HTTP请求
与服务器建立连接之后,就可以向服务器发起请求了
image.png
四、服务器处理请求
服务器收到请求后,会开始解析请求信息,例如调度静态资源等,通过相应的这些资源文件处理用户请求和参数,并调用数据库信息,最后将结果过返回给客户端
image.png
五、返回响应数据
在HTTP里,有请求就会有响应,哪怕是错误信息,在响应结果中都会有一个HTTP状态码
在响应结果中都会有一个HTTP状态码
image.png六、关闭TCP连接
为了避免服务器与客户端的资源占用和耗损,当双方没有请求或响应传递,任意一方都可以发起关闭请求。
与创建TCP连接的三次握手类似,关闭TCP连接,需要4次握手
客户端:‘老哥,我这没数据啥要给您的了,咱挂了吧’
服务端: ‘行,老哥看看俺这边还有木有数据给你’
服务端:‘我这也没数据给你了,咱挂了吧’
客户端: ‘ok’
七、浏览器解析HTML
这一篇请看: 前端必会知识点-浏览器的渲染机制
网友评论