当浏览器输入url时的过程

135 阅读2分钟

​ 持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

完全凭记忆书写,还有很多错误不足,望大神批评指正。

0.强制缓存和协商缓存

1.浏览器第一次加载资源,服务器返回200,浏览器将资源文件从服务器上请求下载下来,并把response header及该请求的返回时间一并缓存;

2.下一次加载资源时,先比较当前时间和上一次返回200时的时间差,如果没有超过cache-control设置的max-age,则没有过期,进行强制缓存,不发请求直接从本地缓存读取该文件(如果浏览器不支持HTTP1.1,则用expires判断是否过期);如果时间过期,则向服务器发送header带有If-None-Match和If-Modified-Since的请求

3.服务器收到请求后,优先根据Etag的值判断被请求的文件有没有做修改,Etag值一致则没有修改,命中协商缓存,返回304;如果不一致则有改动,直接返回新的资源文件带上新的Etag值并返回200;;

4.如果服务器收到的请求没有Etag值,则将If-Modified-Since和被请求文件的最后修改时间做比对,一致则命中协商缓存,返回304;不一致则返回新的last-modified和文件并返回200;;

1.域名转换成ip

计算机会在本地的 hosts 文件寻找你输入的域名所对应的 ip,如果 hosts 文件没有找到对应的 ip,就会在最近的DNS服务器去解析你的域名,从而获取对应的ip,如果再找不到,那说明域名错误,访问不到资源

2.开始发送请求

在获取到 ip 地址后,会先发起请求,然后服务器一般会响应一个index.html页面给客户端,客户端拿到html页面后进行从头解析,解析到 link 标签后会请求获取相应的 CSS 文件,并交给 CSS 引擎加载 CSS 规则树,而加载到 script 标签,会把js代码下载下来,Chrome的Bink内核会拿到js代码以流的方式传递给V8引擎,来加载成字节码,热函数会直接加载成机器指令并保存起来

​编辑

3.页面的展示

当 html 和 css 加载完毕后进行构建渲染树,其实在渲染树之前 js 代码还会对DOM树进行标签节点操作(例如添加和删除,还有css样式)。因为分辨率的原因,渲染树完成后还有一个排版操作(layout),计算标签节点的精确位置,然后才会进行绘制(颜色......),最后呈现到电脑屏幕上