整体流程:
1. DNS域名解析
2. 建立TCP连接
3. 发送HTTP请求
4. 服务器处理请求
5. 返回响应结果
6. 关闭TCP连接
7. 浏览器解析HTML
8. 浏览器布局渲染
详细:
1. DNS域名解析
在浏览器输入网址,其实就是要向服务器请求我们想要的页面内容,所以浏览器首先要确认的是域名所对应的服务器在哪里。
将域名解析成对应的服务器IP地址这项工作,是由DNS服务器来完成的。
客户端收到域名地址后,首先去找本地的hosts文件,检查在该文件中是否有相应的域名、IP对应关系,如果有,则向其IP地址发送请求,如果没有,再去找DNS服务器。
2. 建立TCP连接
三次握手:请求连接(SYN数据包),确认信息(SYN/ACK数据包),握手结束(ACK数据包)
3. 发起http请求
与服务器建立了连接后,就可以向服务器发起请求了。
4. 服务器处理请求
服务器端收到请求后的由web服务器(准确说应该是http服务器)处理请求。
web服务器解析用户请求,知道了需要调度哪些资源文件,再通过相应的这些资源文件处理用户请求和参数,并调用数据库信息,最后将结果通过web服务器返回给浏览器客户端。
5. 返回响应结果
在http里,有请求就会有响应,哪怕是错误信息。
在响应结果中都会有个一个http状态码,如200、301、404、500等。通过这个状态码可以知道服务器端的处理是否正常,并能了解具体的错误。
6. 关闭TCP连接
为了避免服务器与客户端双方的资源占用和损耗,当双方没有请求或响应传递时,任意一方都可以发起关闭请求。与创建TCP连接的3次握手类似,关闭TCP连接,需要4次握手。
7. 浏览器解析HTML
浏览器需要加载解析的不仅仅是HTML,还包括CSS、JS。以及还要加载图片、视频等其他媒体资源。
浏览器通过解析HTML,生成DOM树,解析CSS,生成CSS规则树,然后通过DOM树和CSS规则树生成渲染树。
渲染树与DOM树不同,渲染树中并没有head、display为none等不必显示的节点。
8. 浏览器布局渲染
根据渲染树布局,计算CSS样式,即每个节点在页面中的大小和位置等几何信息。
HTML默认是流式布局的,CSS和js会打破这种布局,改变DOM的外观样式以及大小和位置。
参考:
https://segmentfault.com/a/1190000012092552
https://blog.csdn.net/qq_21993785/article/details/81188253