1.解析IP地址
a.浏览器搜索浏览器dns缓存
b.搜索操作系统dns缓存
c.搜索路由器的dns缓存
d.操作系统将域名发送至 本地域名服务器- -(递归查询方式),本地域名服务器 查询自己的DNS缓存,查找成功则返回结果;
e.否则,本地域名服务器向根域名服务器查询(一般是迭代查询),迭代查询的意思是根域名服务器要么给出IP地址,要么告诉本地域名服务器下一步应该向哪个服务器进行查询。
递归查询和迭代查询的区别在于:后续的查询是由请求发起者还是接收者进行查询。
f.本地域名服务器 将得到的IP地址返回给操作系统,同时自己也将IP地址缓存起来
g.操作系统将 IP 地址返回给浏览器,同时自己也将IP地址缓存起来
2.tcp连接与http连接
a.三次握手建立TCP连接
b.浏览器向Web服务器发送http请求命令(http请求包含请求头,可能包含请求体,请求头中包含我们希望对请求文件的操作的信息,请求体中包含传递给后台的参数。)
c.服务端接受请求并且做出响应发送给客户端(响应也包含两部分,响应头和相应体,响应体就是我们所请求的文件)
d.客户端收到响应并且解析响应响应给客户,经过网络传输,文件被下载到本地客户端,客户端开始加载。
3.html渲染
a.客户端浏览器加载了html文件后,开始解析html文件;
b.遇到js/css/image等静态资源时,就向服务器端去请求下载(会使用多线程下载,每个浏览器的线程数不一样)。
以css为例,css中的url发起http请求,这个时候就用上keep-alive特性了(由于http1.1协议增加了Connection: keep-alive声明,故tcp连接不会关闭,可以复用),建立一次HTTP连接,可以请求多个资源,下载资源的顺序就是按照代码里的顺序,但是由于每个资源大小不一样,而浏览器又多线程请求请求资源,所以从下图看出,这里显示的顺序并不一定是代码里面的顺序。
c.最后,浏览器利用自己内部的工作机制,把请求到的静态资源和html代码进行渲染,渲染之后呈现给用户