前端面试必考题:输入网址点击回车到页面展示发生了什么?很多时候我们只是了解其中的过程很少去细细研究,today,今天,就让我仔细的剖析一下其中的细节。
1. DNS 解析
当你输入网址 www.google.com 之后,小伙伴们就开始忙了:
主机:“本地呼叫域名服务器,本地呼叫域名服务器,亲,你知道www.google.com 的 IP 是多少吗?”
本地域名服务器打开 DNS 高速缓存,读取缓存发现没有:“主机主机,你别着急我帮你打听打听。”
本地域名服务器打通跟域名服务器的电话:“根兄,你知道 www.google.com. 的 IP 是多少吗?”
根域名服务器解析了网址后面的 ‘ .’ ,回答:“本哥啊,我也不知道你问问 COM 顶级域名服务器吧。”
本地域名服务器挂了电话又给 COM 顶级域名服务器打通电话:“老顶,你知道 www.google.com 的 IP 是多少吗?”
顶级域名服务器解析后回答:“不清楚,你向 google.com 打听打听。”
本地域名服务器又打通 google.com 域名服务器:“老哥,你知道www.google.com 的 IP 是多少吗?”
google.com 域名服务器自己找了找,发现是自己定义的:“小本,这你算问对人了,它的 IP 是 64.233.189.104。”
本地域名服务器挂了电话之后把这个消息高速了主机,然后又把 IP 地址存到了自己的高速缓存中。
画重点了:主机向本地域名服务器发送消息是递归查询,本地域名服务器向后面的服务器发送查询是迭代查询。
画考点了:DNS 缓存包括浏览器缓存、系统缓存、路由器缓存、IPS 服务器缓存、根域名服务器缓存、顶级域名服务器缓存、主域名服务器缓存。
2. 封装 HTTP 请求
这就是简单的 HTTP 请求,包括请求行、请求报头、请求正文。
画考点:GET 与 POST 的区别。
http://www.jianshu.com/p/b1fecf6ea73d
3. TCP 连接
前面第一步已经得到了一个 IP 地址在应用层,应用层通过 Socket 与传输层建立连接,应用层使用的协议:http、ftp等。
传输层利用 TCP 协议通过三次握手与服务端建立连接,然后把 TCP 包打包到网络层的 IP 包,IP进行封装到数据链路层转为数据帧结构,然后再传到物理层的利用比特流的形式进行数据传输。
画考点:三次握手,四次挥手的过程、五层结构以及各层的协议。
4.服务器永久重定向响应
前面呢我们已经给服务端发送了数据,这个时候为什么服务端不是直接把返回请求而是要返回301永久重定向呢?
答:如果一个页面有两个地址,就像http://www.yy.com/和http://yy.com/,搜索引擎会认为它们是两个网站,结果造成每个搜索链接都减少从而降低排名。而搜索引擎知道301永久重定向是什么意思,这样就会把访问带www的和不带www的地址归到同一个网站排名下。还有就是用不同的地址会造成缓存友好性变差,当一个页面有好几个名字时,它可能会在缓存里出现好几次。
画重点:1. 重定向原因:网站调整、网页被移到一个新地址、王网页扩展名改变
画考点:301和302的区别。
5. 浏览器跟踪重定向地址
重复第三步,客户端再次发送一个 HTTP 请求。
6. 服务器处理请求
服务起从在固定的端口接收到TCP报文开始,会对TCP连接进行处理,对HTTP协议进行解析,并按照报文格式进一步封装成HTTP Request对象,供上层使用。
7. 服务器返回一个 HTTP 响应
经过前面的步骤,服务器返回一个响应,里面也包括状态行、响应头、响应正文。
画考点:常用的状态码
8. 浏览器显示 HTML
在浏览器没有完整接受全部HTML文档时,它就已经开始显示这个页面了,过程:
a. HTML 显示 dom 树;
b. CSS 转成 CSSOM;
c. 构建渲染树;
d. 生成布局;
e. 绘制渲染树;
画考点:重排与重绘
9. 浏览器发送获取嵌入在 HTML 中的资源
浏览器会发送一个获取请求来重新获得这些文件。比如要获取外图片,CSS,JS文件等
画考点:雅虎的35条前端优化。