在地址栏里输入一个URL,到这个页面出现,中间会发生什么?

488 阅读2分钟

HEY,小伙伴们!

这是一道经典的面试题,我根据自己理解简单讲一下吧! 先来看个图:

微信图片_20210901161124.jpg 当我们在浏览器url中输入我们的域名网址,浏览器会先去查找这个域名是否在缓存中,先去查找的是浏览器缓存,然后就会去系统的hosts文件中是否有记录,如果没有?则会查询DNS服务器,从dns缓存查是否有此网址?如果没有,dns开始进行递归查询,如果还是没有,最后从全球13个根节点出发从域名最后一位.开始一级一级往前查询,直到找出对应的ip地址及端口号,构建出一个http请求,这个http请求包含的报文有请求方法,请求说明和附带信息等,这个http封装一个tcp包中,依次通过传输层,网络层,数据链路层,物理层到达服务器,服务器解析了这个请求做出响应,返回相应的html给浏览器,此时的html是个树形结构,浏览器根据它来构建DOM树,构建DOM树的时候,碰到js或者外联js,会被阻塞,所以js一般都在html后面加载;然后根据css构建cssom树,cssom树和Dom树的结合称为渲染树,这个渲染树主要是排除js,meta和display:none的元素等去布局的,确定了元素大小位置等因素,之后再去渲染页面。因为html文件中包含图片,视频,音频等,遇到这些资源会并行下载,浏览器对每个域的并行下载限制在4-6个。当所有的请求中,我们还需要关注下缓存,一般看下Cache-Control看资源是否过期,如果没有,就直接使用本地缓存,过期就请求并在服务器验证文件是否修改。若上一次响应设置了ETag的值会在这次请求的时候作为if-none-Match的值交给服务器验证,如果一样的,就继续校验 Last-Modified,具体缓存过程如下图

截图.png

参考出自:segmentfault.com/a/119000002…