1.从输入url到页面展示发生了什么?(个人简化版答案)
【No1】输入地址
我们输入的过程中,浏览器会智能的匹配可能的url(从历史记录、书签等地方),给出智能提示。
chrome甚至会直接从缓存中把网页展示出来。
【No2】浏览器查找域名的ip地址
(1)查找本地hosts文件。
(2)如果hosts没有相应配置。浏览器发送DNS请求,到本地DNS服务器。本地DNS服务器查找自己的缓存。
(3)如果本地DNS服务器没有缓存。本地DNS服务器会向DNS根服务器进行查询。
(4)DNS根服务器没有记录域名和ip的对应关系。它会告诉本地DNS服务器,可以到域服务器上去查询,并给出域服务器地址。
(5)本地DNS服务器向域服务器发送请求。(.com就是一个域服务器)域服务器接到请求后,会告诉本地DNS服务器,你的域名的解析服务器地址。
(6)本地DNS服务器向域名的解析服务器发送请求,这时,可以收到一个域名和ip的对应关系。本地DNS服务器把这个对应关系保存在本地缓存中,并把ip地址返回给用户电脑。
总体查询流程:
本地hosts —> 本地DNS服务器 —> 根DNS服务器 —> 域DNS服务器 —> 域名的解析服务器
【No3】浏览器向web服务器发送一个HTTP请求
浏览器以一个随机端口向服务器的WEB程序80端口发起TCP连接请求。
经过三次握手,建立起TCP连接。
http请求发送。
【No4】服务器的永久重定向响应
服务器给浏览器响应一个301永久重定向响应。
如,输入jd.com时,会返回http://www.jd.com/
【No5】浏览器跟踪重定向地址
浏览器向重定向的地址再发送一个http请求。
【No6】服务器处理请求
这里,一些大一点的网站会在浏览器和服务器之间加一层反向代理,即Nginx。
作用:
当访问量大的时候,将用户请求分配到不同的应用服务器上处理。这里,同一个应用会事先部署到多台服务器上。
此时,客户端的请求会发送到Nginx,Nginx再请求应用服务器,然后将结果返回给客户端。
【No7】服务器返回一个HTTP响应
【No8】浏览器进行页面渲染
浏览器在接收全部HTML文档前就开始进行显示。
DOM Tree + style rules ——> render tree
render tree(渲染树)构建完成后,浏览器进行布局、绘制,最后合成。
(1)html加载过程中遇到js文件,会挂起渲染(加载解析渲染同步)的线程。这里,要等到js文件加载、解析、执行完毕,才可以恢复html文档的渲染线程。
(2)html加载过程中,遇到需要获取的外部资源,会再次向服务器发起请求。如:图片、css、js文件等。
#待续......