一个网页从我们输入网址到打开经历了以下步骤。
DNS
解析
DNS
(域名系统 Domain Name System)由解析器
和域名服务器
组成,域名服务器
保存着该网络中所有主机的域名
和对应的IP地址
,域名
有唯一对应的IP地址
,但是IP地址
不一定对应一个域名,我们就是根据DNS
来上网的。
- 当用户输入一个
网址
并按下回车键时,浏览器得到一个域名
。而实际通讯过程中我们需要一个IP地址
。因此我们需要先把域名
转化成对应的IP地址
,这个过程就叫做DNS
解析。
过程
简述
浏览器搜索缓存-->hosts文件和操作系统缓存-->域名解析服务器-->递归迭代
YSE-->返回给浏览器
NO-->向下找
详细描述
- 浏览器首先搜索自身缓存的
DNS
记录。 - 如果没有或记录已经过期,则搜索
hosts
文件和操作系统缓存。 - 如果没有或记录已经过期,则向域名解析服务器发送解析请求。
- 如果还是没有,则开始递归 + 迭代解析。
- 获取域名和对应
IP
后,一步步向上返回,直到返回给浏览器。
发起TCP
请求(三次握手)
简述
客户端(发送连接请求)-->服务器端
服务器端(建立连接并发送确认报文)-->客户端
客户端(发送确认收到确认报文)-->服务器端
详细描述
- 客户端向服务器端发送连接请求的报文。
- 服务器端收到请求后,同意建立连接,并向客户端发送确认报文。
- 客户端收到后,再次向服务器端发送报文,确认已经收到确认报文。
建立起TCP
连接后,开始进行通信。
建立TCP
连接后,浏览器向服务器发送HTTP
请求
- 如:浏览器发出取文件指令
GET
。
负载均衡
当一台服务器无法支持大量用户访问时,将用户分摊到两个或多个服务器上的方法叫负载均衡
。
过程
简述
浏览器(发送请求)-->Nginx(建立TCP连接,转发请求)-->web服务器(发送网页)-->Nginx(传递网页)-->filter链(处理)-->浏览器
详细描述
- 一般,如果我们的平台配备了
负载均衡
的话,前一步DNS
解析获得的IP
地址应该是我们Nginx
负载均衡服务器的IP地址。所以,我们的浏览器将我们的请求发送到了Nginx
负载均衡服务器上。 -
Nginx
根据我们设定的分配算法和规则,选择一台后端的真实Web服务器,与之建立TCP
连接、并转发我们浏览器发出去的网页请求。 -
Web
服务器收到请求,产生响应,并将网页发送给Nginx
负载均衡服务器。 -
Nginx
负载均衡服务器将网页传递给filter链处理,之后发回给我们的浏览器。
服务器响应HTTP请求,将请求的资源发送给浏览器。
浏览器释放TCP
连接(四次挥手)
浏览器(发送释放连接报文)-->服务器
服务器(发送确认报文并发送完数据)-->浏览器
服务器(发送释放连接请求)-->浏览器
浏览器(发出确认)-->服务器
等待一段时间后,浏览器释放TCP连接
- 浏览器向服务器发送释放连接报文。
- 服务器收到后,发出确认报文,然后将服务器上未传送完的数据发送完。
- 服务器数据传输完成后,向浏览器发送释放连接请求。
- 浏览器收到后,发出确认,然后等待一段时间,释放
TCP
连接。
浏览器渲染
浏览器接收到服务器服务器返回的HTML
页面代码,在解析和渲染这个页面时,里面的JS
、CSS
、图片
等静态资源,也是一个个HTTP
请求,都需要经过上面的步骤。
- 浏览器根据页面内容,生成
DOM Tree
。 - 根据
css
内容,生成CSS Rule Tree(规则树)
。 - 调用
JS执行引擎执
行JS
代码。 - 根据
DOM Tree
和CSS Rule Tree
生成Render Tree(呈现树)
。 - 根据根据
Render Tree
渲染网页。
文章参考自https://www.jianshu.com/p/0c8c7cecf946
和https://www.jianshu.com/p/cc1d185a7842
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。