相信这种问题频繁地出现在许多面试中,我不知道面试官期望通过这个问题考察到什么,可能他们期望的答案正如你在网上能搜到的一般,大致输入网址后发生了:
<span]
- DNS解析域名到ip地址
- 浏览器发送请求
- 服务器接受到请求进行处理
- 服务器返回响应
- 浏览器针对响应进行解码,获取到html
- 浏览器渲染html、构建dom节点、加载css、运行脚本
所以我真的很想呼吁面试的时候别再问这道题了,上面写的只不过是看似标准的“标准答案”罢了。
就从DNS解析开始说吧,谁说了浏览器一定要进行DNS解析的?“标准答案”没有考虑到如果浏览器使用代理的情况,如果浏览器使用代理服务器,那么DNS解析的任务是由代理服务器完成的。使用代理服务器和不使用代理服务器是有很大差别的,用了代理后如果是HTTPS请求,那么浏览器会先发一个HTTP CONNECT明文请求给代理,由代理创建TLS隧道后,然后再盲发浏览器和服务器之间的数据,光是这个技术细节都有一大篇RFC标准可以读。
第三第四步服务器接受请求进行处理然后返回就有更多可以展开的,涉及到很多后端的架构体系,请求的资源是动态还是静态的,是不是有load balance,怎么route你这个请求,后端怎么样的缓存策略等等。
再后面浏览器处理响应渲染页面,要多复杂有多复杂。浏览器发展至今也就那么屈指可数的几个渲染引擎。即便如微软在已有trident引擎基础上倾入全力来开发edgehtml,也抵不住最后转向chromium的现实。