一个页面从输入url到页面加载完成究竟经历了些什么

xiaoxiao2021-02-28  4

本人经参考谢希仁著《计算机网络(第 5版)》、《HTTP权威指南》和网络上关于浏览器渲染原理的介绍,结合自己理解,整理出以下结论,如有不正确或者不完善之处欢迎指正:

当用户在浏览器的地址栏输入要找的页面的url后,如输入http://www.tsinghua.edu.cn/chn/yxsz/index.html,具体发生了以下步骤:

1、浏览器向DNS服务器请求解析www.tsinghua.edu.cn的IP地址;

具体来说:

浏览器调用解析程序,并成为DNS服务器的一个客户,把待解析域名放在DNS请求报文中,以UDP用户数据报方式发给本地域名服务器,(使用UDP是为了减少开销)。本地域名服务器在查找域名后,把对应的IP地址放在响应报文中返回。如果本地域名服务器无法查找到对应域名,那么该域名服务器就成为DNS中的另一个客户,并向其他域名服务器发出查询请求。这种过程直到找到能够回答该请求的域名服务器为止。

2、DNS解析出清华大学服务器对应的IP地址为166.111.4.100并将查询结果告诉浏览器;

3、浏览器采用三次握手与服务器建立TCP连接(在服务器端IP地址是166.111.4.100,端口是80);

 

4、浏览器发出HTTP请求报文;

 

5、服务器发送HTTP响应报文;

无论请求报文和响应报文都分为三部分:起始行、头部、主体部分。请求报文的起始行说明了要做些什么,响应报文的起始行则说明发生了什么。首部字段向请求或者响应报文中添加一些附加信息,他们是一些名/值对的列表。主体部分可选,它是HTTP真正要传输的内容。

 

服务器在响应报文的主体部分携带了HTML代码,用于浏览器进行页面渲染。

6、释放TCP连接;

7、浏览器依据服务器传来的响应报文(主体部分)数据从上到下解析HTML代码,在<head>部分获取到CSS,然后后开始渲染页面;

如果link标签引入的外部样式表放在<body>底部,由于从上到下解析,一开始不会显示元素样式,直到解析到link部分的CSS才会重新渲染页面;

如果网速较慢,html代码加载完成后而css还没加载完的话,这会导致页面没有样式而难以阅读,所以不推荐这种方式。

8、当浏览器在HTML代码中发现对一些资源的引用时(如<img>标签引用了一张图片),浏览器向服务器发出异步请求获取这些资源。此时浏览器不会等到资源下载完,而是继续渲染后面的代码;

 

9、服务器返回浏览器需要的资源,浏览器回过头来重新渲染该部分代码;

10、当浏览器发现包含JavaScript代码的<script>标签时,立即执行它;如果JavaScript脚本命令改变前面的布局或者样式,浏览器不得不重新渲染这部分代码;

11、</html>页面渲染完毕。

转载请注明原文地址: https://www.6miu.com/read-2000075.html

最新回复(0)