输入URL到浏览器的解析过程
前置知识
nslookup baidu.com
:获取百度的IP地址 ipconfig /all
:获取本地IP的信息 ipconfig /displaydns
:获取本地缓存的IP地址和域名的映射关系 - 本地配置IP地址和域名映射(hosts):C:\Windows\System32\drivers\etc\的hosts文件
- 本地DNS服务器配置:控制面板-网络和Inertnet-网络连接-WLAN(连网)-网络/Inernet协议版本4(TCP/IPv4)-属性/常规,可选择自动获取或者自定义服务器地址。
过程关键点
- URL解析
- 缓存检查
- DNS 解析:将域名解析成 IP 地址;
- TCP 连接:TCP 三次握手;
- 发送 HTTP 请求;
- 服务器处理请求并返回 HTTP 的报文;
- 浏览器解析渲染页面;
- 断开连接:TCP 四次挥手;
浏览器输入域名-获取IP地址
- 查看本地缓存是否有映射,如果有直接返回IP地址,否则下一步
- 查看本地hosts,有就返回IP地址,否则下一步
- 发送请求到DNS服务器,有就返回IP地址,否则浏览器显示域名解析失败
解析html
- 加载html(构建dom树)并渲染html(构建render树-给浏览器渲染)页面
- 当遇到.css样式文件,会暂停html的渲染,去请求css文件(注意这里是暂停html的render,并没有停止dom的构建,原因:css的执行可能会影响html的布局即dom树的layout阶段,为了减少重排重绘)【css阻塞】
- 服务器返回css文件,并进行解析css,然后继续渲染html
- 当遇到img,向服务器发送请求。异步的,不阻塞后面代码的执行
- 服务器返回了图片资源,由于图片会影响页面布局,因此浏览器会重新布局并渲染那部分的代码
- 当碰到同步js文件,停止所有的加载和渲染,然后去加载js文件并执行【js阻塞】
- 所有html,css,js加载并渲染完,页面就执行完了
页面渲染的过程
- 解析html,构建dom树
- 构建render树(渲染树)
- 布局render树(layout)
- 渲染render树
相关知识 (opens new window)