在浏览器地址栏敲下www.xx.com 这段时间发生了什么?
曾经在一家公司面试的时候,面试官管问了我一个问题:“在浏览器地址栏敲下www.xx.com 这段时间发生了什么?”
当听到这个问题的时候,我脑袋就蒙了,虽然知道就是请求与响应,但是要说个1234出来还真不行,最后只说了就是请求与响应什么的,万幸的是面试通过了。
虽然面试通过了,但是问题还是要解决的,我翻了点资料最后总结如下:
当输入域名并敲击回车的时候。
1.浏览器开始搜索自身的DNS缓存。
2.如果浏览器没有缓存,或者缓存已经失效,搜索操作系统自身的缓存。
3.如果操作系统自身的缓存失效,读取本地的HOST文件。
4.浏览器发起DNS的系统调用,发起一个域名解析请求,一般是运营商的DNS服务器。
5.宽带运营商的DNS服务器会查找自身的缓存
6.运营商的服务器发起一个迭代的DNS请求,它首先会找根域的DNS IP地址,然后返回com域IP地址,然后运营商服务器向com域服务器发起请求,返回xx.com域的IP地址,然后再次发起请求(这里一般指的是域名注册商,像万网之类的),找到结果将地址发给运营商的服务器。运营商服务器把结果返回给操作系统内核,并将域名缓存起来,操作系统内核将结果返回给浏览器,浏览器获取到了xx.com的IP地址。
7.浏览器获取到域名对应的IP地址后,发起HTTP“三次握手”。浏览器用随机端口想IP地址服务器发起TCP连接请求。经过层层的路由以及网卡、防火墙,最终到达WEB服务端。
8.TCP/IP连接建立起来以后,浏览器向服务器发生HTTP请求。
9.服务器端收到这个请求,根据路径参数经过后端的一些处理之后,吧结果返回给浏览器。
10.浏览器获取结果(JS/CSS/图片资源,都要结果上面的步骤进行HTTP请求),开始下载HTML文档 > HTML解析 > 加载DOM树 > 生成Render树 > 逐级解析DOM树从根标签开始(一般指HTML表签/元素),最终将渲染后的页面展示给用户。