一个网页从我们输入网址到打开,经历了以下几个步骤。DNS解析DNS(DomainNameSystem)由解析器和域名服务器组成。域名服务器存储网络中所有主机的域名和对应的IP地址。一个域名有一个唯一对应的IP地址,但一个IP地址不一定对应一个域名,我们使用DNS来上网。当用户输入一个URL并按下Enter键时,浏览器得到一个域名。在实际通信过程中,我们需要一个IP地址。因此,我们需要先将域名转换成对应的IP地址。此过程称为DNS解析。流程简述浏览器搜索缓存-->hosts文件和操作系统缓存-->域名解析服务器-->递归迭代YSE-->返回浏览器NO-->往下看详细说明浏览器先搜索它自己的缓存DNS记录。如果没有或记录已过期,则搜索主机文件和操作系统缓存。如果没有或者记录已经过期,则向域名解析服务器发送解析请求。如果还是不行,开始递归+迭代解析。获取到域名和对应的IP后,一步步返回,直到返回到浏览器。发起TCP请求(三次握手)briefclient(发送连接请求)-->serverserver(建立连接并发送确认报文)-->clientclient(发送确认收到确认报文)-->server端描述在详细说明客户端向服务器端发送连接请求的消息。服务端收到请求后,同意建立连接,并向客户端发送确认信息。客户端收到后,再次向服务端发送消息,确认收到确认消息。TCP连接建立后,开始通信。TCP连接建立后,浏览器向服务器发送HTTP请求,如:浏览器发出文件获取命令GET。负载均衡当一台服务器无法支持大量用户访问时,将用户分布到两台或多台服务器上的方法称为负载均衡。Processbriefbrowser(发送请求)-->Nginx(建立TCP连接,转发请求)-->webserver(发送网页)-->Nginx(发送网页)-->filterchain(处理)-->browse一般来说,如果我们的平台有负载均衡,那么上一步DNS解析得到的IP地址应该就是我们的Nginx负载均衡服务器的IP地址。因此,我们的浏览器将我们的请求发送到Nginx负载均衡器。Nginx根据我们设置的分配算法和规则,选择一个真实的后端web服务器,与其建立TCP连接,转发我们浏览器发送的网页请求。Web服务器接收请求,生成响应,并将网页发送到Nginx负载均衡服务器。Nginx负载均衡服务器将网页传递给过滤器链进行处理,然后将其发送回我们的浏览器。服务器响应HTTP请求,将请求的资源发送给浏览器。浏览器释放TCP连接(挥手四次)浏览器(发送连接释放报文)-->服务器服务器(发送确认报文并发送数据)-->浏览器服务器(发送释放连接请求)--->browsesBrowserbrowser(issueconfirmation)-->服务器等待一段时间后,浏览器释放TCP连接,浏览器向服务器发送释放连接报文。服务器收到后发送确认信息,然后发送服务器上未完成的数据。服务器数据传输完成后,向浏览器发送释放连接请求。浏览器收到后发出确认,然后等待一段时间释放TCP连接。浏览器渲染浏览器接收服务器服务器返回的HTML页面代码。在解析渲??染这个页面的时候,里面的JS、CSS、图片等静态资源也是一个一个的HTTP请求,都需要经过上面的步骤。浏览器根据页面内容生成DOMTree。根据css内容生成CSSRuleTree(规则树)。调用JS执行引擎执行JS代码。基于DOMTree和CSSRuleTree生成RenderTree(渲染树)。根据渲染树渲染网页。文章参考自https://www.jianshu.com/p/0c8c7cecf946和https://www.jianshu.com/p/cc1d185a7842
