浏览器输入URL地址后发生的事情
基本过程
- DNS域名解析 (先查本地hosts有没有域名与IP对应关系,没有则向DNS服务商获取IP地址)
- 建立TCP连接(传输层)
- 发送HTTP请求(应用层)
- 服务器处理请求
- 返回响应结果
- 关闭TCP连接
- 浏览器解析HTML
- 浏览器布局渲染
详解参考
https://segmentfault.com/a/1190000012092552
1、先查本地hosts有没有域名与IP对应关系,没有则向DNS服务商获取IP地址
2、建立TCP连接需要与服务器进行三次握手。
- 客户端发送一个SYN标志的数据包给服务端--->服务端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息,最后客户端再回传一个带ACK标志的数据包,代表握手结束,连接成功。
3、发送请求【注意:请求头】
4、服务器处理请求
5、返回响应结果【注意:响应头】
6、四次握手,关闭TCP连接
7、解析HTML 解析HTML生成DOM树 --> 解析CSS生成CSS对象模型(CSSOM) --> 整合生成Render Tree --> 遇到
<script>
则暂停渲染(防止js更改dom) --> 根据Render Tree渲染页面
补充:css放head、script放body的原因
浏览器解析html文档是从上往下的
- 解析DOM元素后再加载css会造成页面样式跳动的问题,因此css需要放在head中加载【不靠谱解释:浏览器生成Render Tree渲染的时候会整合现有的DOM树与CSS对象模型(CSSOM)】
- 浏览器解析到script标签后会下载、解析和执行,同时会阻塞后面的资源加载。如果放head中加载js文件,会造成较长的白屏时间